Я пытаюсь отобразить все мета-ключи с одним и тем же идентификатором сообщения в одной строке.
От:
ID | Meta Key | Value
123| name | Bitcoin
123| symbol | BTC
123| date | April 9, 2000
123| price | 112
124| name | Bitcoiin
124| symbol | B2G
124| date | April 9, 2001
124| price | 11
К:
ID | Name | Symbol | Date | Price
123| Bitcoin | BTC | April 9, 2000 | 112
124| Bitcoiin | B2G | April 9, 2001 | 11
Пытался:
SELECT P.ID,
MAX(IF(PM.meta_key = 'name', PM.meta_value, NULL)) AS name,
MAX(IF(PM.meta_key = 'symbol', PM.meta_value, NULL)) AS symbol,
MAX(IF(PM.meta_key = 'date', PM.meta_value, NULL)) AS date,
MAX(IF(PM.meta_key = 'price', PM.meta_value, NULL)) AS price
FROM crypto_posts AS P
LEFT JOIN crypto_postmeta AS PM on PM.post_id = P.ID
WHERE P.post_type = 'historical-info'
ORDER BY P.post_date DESC
LIMIT 10
Выводит только 1 элемент. Что мне не хватает?
Вам нужна группа по
SELECT P.ID,
MAX(IF(PM.meta_key = 'name', PM.meta_value, NULL)) AS name,
MAX(IF(PM.meta_key = 'symbol', PM.meta_value, NULL)) AS symbol,
MAX(IF(PM.meta_key = 'date', PM.meta_value, NULL)) AS date,
MAX(IF(PM.meta_key = 'price', PM.meta_value, NULL)) AS price
FROM crypto_posts AS P
LEFT JOIN crypto_postmeta AS PM on PM.post_id = P.ID
WHERE P.post_type = 'historical-info'
group by P.ID
ORDER BY P.post_date DESC
LIMIT 10