Диагональный беспорядок в SQL-запросе в WordPress - PullRequest
1 голос
/ 06 октября 2019

У меня проблема при выполнении SQL-запроса в WordPress, я хотел бы, чтобы каждый Post ID был в одной строке со столбцами meta_key, но я получаю несколько неравных записей.

SELECT P.ID,
     IF(PM.meta_key = 'nombrem', PM.meta_value, NULL) AS nombrem,
     IF(PM.meta_key = 'generom', PM.meta_value, NULL) AS generom,
     IF(PM.meta_key = 'tiempom', PM.meta_value, NULL) AS tiempom,
     IF(PM.meta_key = 'urlm', PM.meta_value, NULL) AS urlm,
     IF(PM.meta_key = 'imagenm', PM.meta_value, NULL) AS imagenm 
FROM K1nG_posts AS P
LEFT JOIN K1nG_postmeta AS PM ON ( P.ID = PM.post_id ) 
WHERE P.post_type = 'post' 
AND (P.post_status = 'publish' OR P.post_status = 'private')  ORDER BY P.post_date DESC

ПоместивВ приведенном выше коде я получаю следующее в phpmyadmin: я хочу, чтобы один идентификатор записи имел каждое значение meta_value в недиагональном горизонтальном столбце, как показано.

enter image description here

Ответы [ 2 ]

1 голос
/ 06 октября 2019

Вы, похоже, ищете условное агрегирование . Для этого вам нужно добавить предложение GROUP BY и окружить ваши условные выражения статистической функцией:

SELECT P.ID,
    MAX(CASE WHEN PM.meta_key = 'nombrem' THEN PM.meta_value END) AS nombrem,
    MAX(CASE WHEN PM.meta_key = 'generom' THEN PM.meta_value END) AS generom,
    MAX(CASE WHEN PM.meta_key = 'tiempom' THEN PM.meta_value END) AS tiempom,
    MAX(CASE WHEN PM.meta_key = 'urlm'    THEN PM.meta_value END) AS urlm,
    MAX(CASE WHEN PM.meta_key = 'imagenm' THEN PM.meta_value END) AS imagenm
FROM 
    K1nG_posts AS P
    LEFT JOIN K1nG_postmeta AS PM ON P.ID = PM.post_id 
WHERE 
    P.post_type = 'post' 
    AND (P.post_status = 'publish' OR P.post_status = 'private')  
GROUP BY P.ID, P.post_date
ORDER BY P.post_date DESC
0 голосов
/ 06 октября 2019

Сгруппируйте данные по P.id и максимально допустимые значения

как

SELECT P.ID,
 MAX(IF(PM.meta_key = 'nombrem', PM.meta_value, NULL)) AS nombrem,
 MAX(IF(PM.meta_key = 'generom', PM.meta_value, NULL)) AS generom,
 MAX(IF(PM.meta_key = 'tiempom', PM.meta_value, NULL)) AS tiempom,
 MAX(IF(PM.meta_key = 'urlm', PM.meta_value, NULL)) AS urlm,
 MAX(IF(PM.meta_key = 'imagenm', PM.meta_value, NULL)) AS imagenm 
FROM K1nG_posts AS P
  LEFT JOIN K1nG_postmeta AS PM ON ( P.ID = PM.post_id ) 
WHERE P.post_type = 'post' 
  AND (P.post_status = 'publish' OR P.post_status = 'private')  ORDER BY P.post_date DESC
GROUP BY P.ID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...