请教 v 友们一个 SQL 语句

2022-05-03 23:37:10 +08:00
 Kei001

正在做一个 wordpress bbpress 的接口,需要查询一篇帖子的评论,但只需要查询出回复主楼的评论,表结构大致如下

wp_posts 表

ID post_author post_date post_content post_type
1 1 2021/12/22 2:52 这是主楼 topic
2 2 2021/12/22 3:52 这条回复主楼 reply
3 4 2021/12/23 4:52 这条回复#2 reply
4 6 2021/12/24 5:52 这条回复#3 reply
5 18 2021/12/25 6:52 这条也回复主楼 reply

wp_postmeta 表

meta_id post_id meta_key meta_value
1 1 _bbp_topic_id 1
2 2 _bbp_topic_id 1
3 3 _bbp_topic_id 1
4 3 _bbp_reply_to 2
5 4 _bbp_topic_id 1
6 4 _bbp_reply_to 3
7 5 _bbp_topic_id 1

也就是只要查询出上面例子里加粗的两行就行。尝试了这样写,但是会把非回复主楼的评论也给查询上了

SELECT * from wp_posts, wp_postmeta WHERE ID = post_id AND post_status = 'publish' AND meta_key = '_bbp_topic_id'  AND meta_value = 1 order by post_date DESC LIMIT 20

观察了一下,回复非主楼的评论在 meta 表里不会有 meta_key 为_bbp_reply_to 这条记录,但是不知道怎么写 SQL 语句能排除掉。

希望能得到万能的 V 友帮助,谢谢!

1176 次点击
所在节点    问与答
5 条回复
liprais
2022-05-04 00:35:56 +08:00
join 之后 meta_key 不等于不就完了
bxb100
2022-05-04 00:38:20 +08:00
最笨的办法就是用子查询,类似
```sql
select *
from wp_posts wp
where wp.id not in (select p.post_id from wp_postmeta p where p.post_id = wp.id and p.meta_key = '_bbp_reply_to')
```
bxb100
2022-05-04 00:53:02 +08:00
还有一个思路,可以用 group by 看 wp_postmeta 的 post_id 是否出现一次,不过不知道是否符合预期

ration
2022-05-04 01:03:28 +08:00
感觉有点复杂
select post_id from wp_postmeta where meta_value=1 and post_id <>1 and not exists
( select 1 from wp_postmeta where post_id = wp_postmeta.post_id and meta_value=1 and meta_key =‘_bbp_reply_to’)
Kei001
2022-05-04 13:34:21 +08:00
@bxb100 感谢 这个可以用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/850702

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX