【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

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