mysql - Get some rows as columns -


i have 2 tables:

 table1:          |id|create_date|title  |type  |          -------------------------------           | 1|2015-07-20 |bla-bla|ticket|  table2_meta:          |id|table1_id|meta_name|meta_value|          -----------------------------------           | 1| 1       | status  | new      |          | 2| 1       | priority| low      |          | 3| 1       | owner   | alex     |  

now, wish select this:

             |id|create_date|title  |status|priority|owner|             |1 |2015-07-20 |bla-bla|new   |low     |alex | 

my solution is:

select        t1.id,       t1.event_date,        case when m.meta_name="status" m.meta_value end status,       case when m.meta_name="priority" m.meta_value end priority,       case when m.meta_name="owner" m.meta_value end owner table1 t1 left join table2_meta m       on m.table1_id=t1.id  t1.type='ticket'  group t1.id  

so, works. seems litle bit ugly.

my question is:
there other solutions select , how make more productive?

hey try in case pivoting of table sqlfiddle

set @sql = null; select   group_concat(distinct     concat(       'max(case when meta_name = ''',       meta_name,       ''' value end) ',       concat(meta_name)     )   ) @sql table1 t1 left join table2 m       on m.table1_id=t1.id  t1.type='ticket';  set @sql = concat('select t1.id,', @sql, ' table1 t1 left join table2 m       on m.table1_id=t1.id  t1.type=''ticket''  group t1.id  ');  prepare stmt @sql; execute stmt; deallocate prepare stmt; 

Comments