Получение нескольких значений в нескольких строках из нескольких таблиц в MySQL - PullRequest
2 голосов
/ 04 сентября 2011

Я использую WordPress. Я хочу получить все из таблицы wp_posts и два значения из таблицы postmeta.

"wp_postmeta" содержит столбцы "post_id", "meta_key" и "meta_value".

Пока что я могу получить одно из "meta_value":

SELECT wp_post.*, $wpdb->postmeta.meta_value AS votes 
FROM wp_posts 
INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) 
WHERE post_type='post' 
AND wp_postmeta.meta_key = 'votes'

Однако я также хочу получить другое значение meta_value с таким же значением post_id, но с другим ключом meta_key. Как я могу расширить этот запрос до "meta_value"?

Ответы [ 3 ]

3 голосов
/ 04 сентября 2011

Если вы не хотите, чтобы в одном сообщении было несколько строк, вы можете сделать это с помощью нескольких объединений:

SELECT wp_post.*, metavotes.meta_value AS votes, metaother.meta_value AS other
FROM wp_posts 
INNER JOIN wp_postmeta metavotes 
    ON ( wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = 'votes') 
INNER JOIN wp_postmeta metaother
    ON ( wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = 'other') 
WHERE post_type='post' 

(предполагается, что для каждой части метаданных в wp_postmeta всегда есть ровно 1 строка. Я не достаточно знаком с WordPress, чтобы знать, так ли это. Если метаданные являются необязательными, используйте вместо них LEFT OUTER JOIN. Если вы можете есть несколько, какой вывод вы хотите?)

2 голосов
/ 04 сентября 2011

Как насчет добавления вашего дополнительного meta_key к запросу с предложением IN.Допустим, вы хотите добавить строковое значение foo:

SELECT wp_post.*, $wpdb->postmeta.meta_value AS votes 
FROM wp_posts 
INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) 
WHERE post_type='post' 
AND wp_postmeta.meta_key IN ('votes', 'foo');
0 голосов
/ 04 сентября 2011

Может быть попробовать что-то вроде этого:

SELECT wp_posts.*, wp_postmeta.meta_value, wp_postmeta.meta_key
       FROM wp_posts INNER JOIN wp_postmeta ON(wp_posts.ID = wp_postmeta.post_id)
       WHERE wp_posts.post_type='post'
             AND wp_postmeta.meta_key IN ('votes', ...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...