从wp_post中选择,并从wp_postmeta中选择多个meta_value

时间:2013-04-04 作者:Chris

我缺乏SQL技能,这让我在这里停滞不前。

我正在尝试选择post\\u id、post\\u title和两个Posteta值-第一个值的meta\\u键为“search\\u country”,第二个值的meta\\u键为“search\\u region”。

我想我有一个只检索search\\u国家的有效解决方案:

 $querystr = "
       SELECT $wpdb->posts.ID as id, $wpdb->posts.post_title as title, $wpdb->postmeta.meta_value as country
       FROM $wpdb->posts, $wpdb->postmeta
       WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id 
       AND $wpdb->postmeta.meta_key = \'search_country\' 
       AND $wpdb->posts.post_status = \'publish\' 
       AND $wpdb->posts.post_type = \'films\'
       AND $wpdb->postmeta.meta_value IS NOT NULL
       ORDER BY $wpdb->posts.post_title ASC
    ";

    $festivals = $wpdb->get_results($querystr, OBJECT);
然而,我不知道如何改变这一点,以获得搜索区域也?

我从未接触过SQL:)

1 个回复
最合适的回答,由SO网友:doublesharp 整理而成

您需要加入post_meta 表2至posts 表,每个元值一次:

SELECT p.ID id, p.post_title title, country.meta_value country, region.meta_value region
FROM {$wpdb->posts} p
JOIN {$wpdb->postmeta} country 
    ON p.ID = country.post_id AND country.meta_key = \'search_country\'
JOIN {$wpdb->postmeta} region
    ON p.ID = region.post_id AND region.meta_key = \'search_region\'
WHERE 
    p.post_status = \'publish\'
    AND p.post_type = \'films\'
ORDER BY p.post_title ASC
我建议给表格加上别名(p, country, 和region) 在两次加入同一个表时,使其更易于阅读。如果你想要另一个meta_value 同时,您可以加入post_meta 表附加时间。

通过使用JOIN 您只返回帖子对两个元键都有值的结果。。。如果你想让一个人NULL 你会的LEFT JOIN 取而代之的是桌子。

结束

相关推荐

从wpdb-作者/用户目录页面选择

我正在wordpress网站上工作,在那里我创建了一个目录页面(authors.php),其中列出了所有用户和特定的作者元。它工作得很好,但我正试图找出如何只显示填写了所需作者元的用户。我尝试了很多不同的事情,但都没有达到我所需要的。这是我的密码<?php $order = \'user_nicename\'; $users = $wpdb->get_results(\"SELECT * FROM $wpdb->users ORDER BY $order\");