Reputation: 65
I have a table named engrams
with columns
mat_name1, mat_name2, mat_name3, mat_name4
that has a relation with table resources
on column id
.
I have this SQL statement
SELECT *
FROM engrams
INNER JOIN resources ON engrams.mat_name1 = resources.id
How do I add the other mat_name
columns with resources.id
and how do I echo the column res_name
from resources
table for every mat_name
?
Upvotes: 1
Views: 717
Reputation: 147166
You need to JOIN
your engrams
table to the resources
table 4 times, once for each material name. Since you will have similar column names from each JOIN
of the resources
table, you will probably need to use aliases to distinguish them in your application framework:
SELECT e.name,
e.description,
e.mat_name1, r1.res_name AS res_name1, r1.description AS res_descr1,
e.mat_name2, r2.res_name AS res_name2, r2.description AS res_descr2,
e.mat_name3, r3.res_name AS res_name3, r3.description AS res_descr3,
e.mat_name4, r4.res_name AS res_name4, r4.description AS res_descr4
FROM engrams e
LEFT JOIN resources r1 ON r1.id = e.mat_name1
LEFT JOIN resources r2 ON r2.id = e.mat_name2
LEFT JOIN resources r3 ON r3.id = e.mat_name3
LEFT JOIN resources r4 ON r4.id = e.mat_name4
Upvotes: 2
Reputation: 1346
If I understand your question correctly, then all you need to do is add OR
statements to your ON
clause.
SELECT *
FROM engrams
INNER JOIN resources
ON engrams.mat_name1 = resources.id
or engrams.mat_name2 = resources.id
or engrams.mat_name3 = resources.id
or engrams.mat_name4 = resources.id
As is that query will return all values for both engrames and resources. If you don't want everything, just explicity define which you do such as:
SELECT resources.res_name, engrams.mat_name1, engrams.mat_name2, engrams.mat_name3,engrams.mat_name4
FROM engrams
INNER JOIN resources
ON engrams.mat_name1 = resources.id
or engrams.mat_name2 = resources.id
or engrams.mat_name3 = resources.id
or engrams.mat_name4 = resources.id
If "echo the column" means something else, you'll have to include some example output or something.
Upvotes: 1