I have a users table as
x
id name age
1 a 20
2 b 22
3 c 23
I have another user_custom_fields table as
id user_id custom_field_id value
1 1 1 ax
2 1 2 ay
3 1 3 az
4 2 1 bx
5 2 2 by
6 2 3 bz
7 3 1 cx
8 3 2 cy
9 3 3 cz
and a third custom_fields table
id field_name
1 field1
2 field2
3 field3
Here the problem is I need the result for each user in a single row with all the custom field_name as column header as
user_id name age field1 field2 field3
1 a 20 ax ay az
2 b 22 bx by bz
3 c 23 cx cy cz
I have heard about pivot queries but I don’t have much knowledge of SQL. Can anyone help me here how to do this
Update: I am using MySql Database
Advertisement
Answer
After a little more search I found one article where they have suggested alternative of pivot in mysql So the complete query will be
SELECT u.id as user_id, u.name, u.age, Max(IF(custom_fields.field_name = 'Field1', user_custom_fields.value, Null)) as 'Field 1', Max(IF(custom_fields.field_name = 'Field2', user_custom_fields.value,Null)) as 'Field 2', Max(IF(custom_fields.field_name = 'Field3', user_custom_fields.value,Null)) as 'Field 3' FROM user u Inner Join user_custom_fields on user_custom_fields.user_id = u.id Inner Join custom_fields on custom_fields.id = user_custom_fields.custom_field_id Group by u.id order by u.id