V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Kei001
V2EX  ›  问与答

请教 v 友们一个 SQL 语句

  •  
  •   Kei001 · 2022-05-03 23:37:10 +08:00 · 1282 次点击
    这是一个创建于 941 天前的主题,其中的信息可能已经有所发展或是发生改变。

    正在做一个 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 友帮助,谢谢!

    5 条回复    2022-05-04 13:34:21 +08:00
    liprais
        1
    liprais  
       2022-05-04 00:35:56 +08:00 via iPhone
    join 之后 meta_key 不等于不就完了
    bxb100
        2
    bxb100  
       2022-05-04 00:38:20 +08:00   ❤️ 1
    最笨的办法就是用子查询,类似
    ```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
        3
    bxb100  
       2022-05-04 00:53:02 +08:00
    还有一个思路,可以用 group by 看 wp_postmeta 的 post_id 是否出现一次,不过不知道是否符合预期

    ration
        4
    ration  
       2022-05-04 01:03:28 +08:00 via Android   ❤️ 1
    感觉有点复杂
    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
        5
    Kei001  
    OP
       2022-05-04 13:34:21 +08:00
    @bxb100 感谢 这个可以用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2583 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 04:41 · PVG 12:41 · LAX 20:41 · JFK 23:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.