【SQL】获取每篇文章的第一条评论



    一个SQL查询问题,表T有字段a、字段b、字段c等多个字段,其中中字段a在不同数据行中有重复;要求获取多个数据行,每个不同的字段a值对应一个数据行,每个数据行为包含相同字段a值的数据行取字段b值最小的一行)。

    举例来说,从文章评论表获取每篇文章的第一条评论,显示需要只取从第2条开始的前2条,表comment内容如下



    comment_id post_id comment_time comment_content
    1 1 2010-1-1 00:00:00 a
    2 3 2010-1-1 01:00:00 b
    3 3 2010-1-1 02:00:00 c
    5 4 2010-1-1 05:00:00 e
    4 4 2010-1-1 04:00:00 d

    表comment中post_id字段有重复,需要选出comment_time最小的一项,希望获取的结果是

    comment_id post_id comment_time comment_content
    2 3 2010-1-1 01:00:00 b
    4 4 2010-1-1 04:00:00 d

    可使用以下SQL语句:

    SELECT * FROM comment WHERE comment_id IN (SELECT MIN(comment_id) FROM comment GROUP BY post_id) LIMIT 1 , 2

    但解决得并不完美,这里利用了comment_id的自增性(大小关系等同于comment_time),而不是直接用发布时间comment_time来比较。

    想到可使用下面的SQL语句:

    SELECT * FROM (SELECT * FROM comment ORDER BY comment_time) GROUP BY post_id LIMIT 1 , 2

    如你有更好的解法,欢迎留言交流!



    本博客所有文章如无特别注明均为原创。
    复制或转载请以超链接形式注明转自枫芸志,原文地址《【SQL】获取每篇文章的第一条评论
    标签:
    分享:

已经有8 条评论抢在你前面了~

  1. 沙发
    坏小子 2011年12月6日 上午6:14

    请教博主 如何获取wordpress文章的第一条评论~ 我是一个文章列表 想在每篇文章下面分别都显示一条对应的文章评论~ 等回应

    [回复]

  2. 板凳
    xw332 2010年7月7日 上午9:15

    惭愧,作为程序员我也看不明白。。
    SELECT * FROM (SELECT * FROM comment ORDER BY comment_time) GROUP BY post_id LIMIT 1 , 2
    除非同时指定了 TOP,否则 ORDER BY 子句在视图、内嵌函数、派生表和子查询中无效。

    [回复]

  3. 地板
    寄之秋 2010年2月4日 下午11:17

    感觉很厉害,我基本不懂,汗呀,不过还是支持版主呀

    [回复]

    晴枫

    晴枫 回复:

    @寄之秋, 技术领域,不做这行看不懂正常
    你的站打不开了?

    [回复]

  4. 4楼
    Firm 2010年2月4日 下午3:25

    额,这方面还真的是看不懂

    [回复]

    晴枫

    晴枫 回复:

    @Firm, 估计你没接触过,一般程序员会比较熟

    [回复]

    Firm 回复:

    @晴枫, 恩,俺是半路出家,一些基础的都看不懂

    [回复]

    晴枫

    晴枫 回复:

    @Firm, 慢慢学,一点点积累,需要一个过程的

    [回复]

无觅相关文章插件,快速提升流量