Вложенный запрос соединения для таблиц WordPress 'Posts' и 'Postmeta' - PullRequest
0 голосов
/ 12 июня 2018

У меня есть некоторые данные в таблице posts и в постмете у меня есть некоторые meta_key с различными значениями, например:

meta_key = 'phone'
meta_value = 987654321

meta_key = 'оценка'
meta_value = 40

Очевидно, что для номера телефона может быть записано несколько точек.
Я хочу получить общее количество баллов по номеру телефона с его отношением к сообщениям.
Этот запрос кажется очень сложным !!!

То, что я пробовал, похоже на это:

SELECT p.*, pm.* from wp_posts AS r    
LEFT JOIN wp_postsmeta AS pm    
ON pm.post_id = r.id    
WHERE (pm.meta_key = 'score')    
LEFT JOIN wp_postsmeta AS p     
ON p.post_id = r.id    
WHERE p.meta_key = 'phone'    

Как мне это реализовать?

1 Ответ

0 голосов
/ 12 июня 2018

Правильный синтаксис:

SELECT p.*, pms.meta_value as score, pmp.meta_value as phone
FROM wp_posts p LEFT JOIN
     wp_postsmeta pms    
     ON pms.post_id = p.id AND pms.meta_key = 'score' LEFT JOIN   
     wp_postsmeta pmp     
     ON pmp.post_id = p.id AND pmp.meta_key = 'phone' ;

Примечания:

  • Псевдонимы таблиц должны иметь смысл.r не имеет смысла для wp_posts, но p имеет.
  • p.* - очень странная вещь для выбора.Я предполагаю, что вы действительно хотите таблицу сообщений.
  • Вы должны дать значения, возвращаемые запросом, с разумными именами, такими как score и phone.
  • Обе фразы where обанеуместны и неправильно использованы в вашем запросе.Эти условия должны быть в пунктах on.

РЕДАКТИРОВАТЬ:

Ваш пересмотренный вопрос, кажется, предлагает:

SELECT pmp.meta_value as phone, SUM(pms.meta_value) as score, 
FROM wp_postsmeta pms LEFT JOIN 
     wp_postsmeta pmp     
     ON pmp.post_id = pms.post_id AND pmp.meta_key = 'phone' and pms.meta_key = 'score'
GROUP BY phone;
...