I have 3 tables:
Users:
id | name |
---|---|
1 | John |
2 | Carol |
Colors:
id | name |
---|---|
101 | Red |
102 | Black |
103 | Blue |
104 | Yellow |
Votes
id | user | vote_01 | vote_02 | vote_03 |
---|---|---|---|---|
1 | 2 | 103 | 101 | 104 |
I would like to see this result
id | name | vote_01 | vote_02 | vote_03 |
---|---|---|---|---|
1 | Carol | Blue | Red | Yellow |
Now I have 3 row in the result set, but I want only 1. (vote_01, _02, _03 have hiearchy, i want to store them in one row / user )
SELECT votes.id, users.name AS username, colors.name
FROM votes
JOIN users ON votes.user=users.id
JOIN colors ON (votes.vote_01=colors.id OR votes.vote_02=colors.id OR votes.vote_03=colors.id)
CodePudding user response:
Votes colors are independent, so each separate vote index must be converted to according color with separate independent colors table's copy:
SELECT votes.id,
users.name AS username,
c1.name vote_01,
c2.name vote_02,
c3.name vote_03
FROM votes
JOIN users ON votes.user=users.id
JOIN colors с1 ON votes.vote_01=c1.id
JOIN colors с2 ON votes.vote_02=c2.id
JOIN colors с3 ON votes.vote_03=c3.id