这是一个wordpress安装,但我认为问题更多的是一般的SQL问题。首先,我的sql技能不是很好(我甚至不知道我是否遵循正确的格式来说明数据库)。
我有两张桌子:
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中wp_postmeta中没有对应行的所有行,其中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;
");
答案 0 :(得分:3)
使用当前查询并进行以下更改:
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;
答案 1 :(得分:3)
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;
应该做的伎俩; - )