这是一个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;