Использование значений полей из объединенного запроса в качестве столбцов - PullRequest
1 голос
/ 09 июня 2011

У меня есть две таблицы MySQL, описывающие данные, которые можно расширить на подклассы, одна, которая описывает данные родительского класса, а другая - поля метаданных как отношения один-ко-многим.

Примеры строк из таблицы page :

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

Ответы [ 2 ]

1 голос
/ 09 июня 2011
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
0 голосов
/ 09 июня 2011

Попробуйте

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

должен получить то, что вам нужно

...