这是一个wordpress安装,但我认为问题更多的是一个普通的sql问题。首先,我的sql技能不是很好(我甚至不知道我是否遵循了正确的格式来说明db)。
我有两张桌子:

wp_posts :

    ID (pk)  |   post_name  |  ...
----------------------------
    45       |    "Hello"
    91       |    "Funny"
    16       |    "Wheat"

wp_postmeta :

    post_id (fk)  |    meta_key      |   meta_value  | ...
------------------------------------------------
    45            |    "_edit_lock"  |   5789789834
    45            |    "fizzbizz"    |   "foobar"
    91            |    "_something"  |   "teve"

我想选择wp_posts中没有对应行的所有行,其中meta_key=“fizzbizz”
我最初有这个查询,但有人指出,在上面的情况下,它不会检索ID='16'。如何正确编写查询?
$pageposts = $wpdb->get_results("
    SELECT * FROM wp_posts p
    JOIN wp_postmeta m
    ON p.ID = m.post_id
    WHERE m.meta_key <> 'fizzbizz'
    ORDER BY p.post_date DESC;
");

最佳答案

对以下更改使用当前查询:
LEFT JOIN而不是JOIN
添加
OR m.metakey IS NULL至您的WHERE条款:

SELECT * FROM wp_posts p
    LEFT JOIN wp_postmeta m
    ON p.ID = m.post_id
    WHERE m.meta_key <> 'fizzbizz'
       OR m.metakey IS NULL
    ORDER BY p.post_date DESC;

10-04 10:31