我有两个MySQL表描述可以扩展到子类的数据,一个描述父类数据,另一个描述元数据字段作为一对多关系。
表格页面:
中的示例行id | name
-----+-----------------------
123 | Example page
999 | Another page
表 page_metadata :
中的示例行page_id | key | value
--------+------------+----------------
123 | picture | test.jpg
123 | video | example.avi
123 | sound | sound.mp3
999 | picture | something.jpg
问题:有没有办法以这种格式获取所有这些数据?
id | name | picture | video | sound
-----+------------------+---------------+-------------+------------------
123 | Example page | test.jpg | example.avi | sound.mp3
999 | Another page | something.jpg | NULL | NULL
答案 0 :(得分:1)
SELECT pm.page_id as id
, p.name
, max(IF(pm.key = 'picture', pm.value, null)) as picture
, max(IF(pm.key = 'video', pm.value, null)) as video
, max(IF(pm.key = 'sound', pm.value, null)) as sound
FROM page p
INNER JOIN page_metadata pm ON (p.id = pm.page_id)
GROUP BY p.id
答案 1 :(得分:0)
尝试
SELECT page.id, page.name, picture.value, video.value, sound.value
FROM page
LEFT OUTER JOIN (SELECT page_id, value FROM page_metadata WHERE key = 'picture') as picture
ON page.id = picture.page_id
LEFT OUTER JOIN (SELECT page_id, value FROM page_metadata WHERE key = 'video') as video
ON page.id = video.page_id
LEFT OUTER JOIN (SELECT page_id, value FROM page_metadata WHERE key = 'sound') as sound
ON page.id = sound.page_id
应该得到你需要的东西