SQL:限制链接到每个连接行的行

时间:2010-04-15 23:07:22

标签: sql mysql join limit

我确实需要从MySQL查询中获得某些结果集的情况,让我们先看看当前的查询。然后问我的问题:

SELECT 
    thread.dateline AS tdateline, post.dateline AS pdateline, MIN(post.dateline)
    FROM thread AS thread
        LEFT JOIN post AS post ON(thread.threadid = post.threadid)
        LEFT JOIN forum AS forum ON(thread.forumid = forum.forumid)
    WHERE post.postid != thread.firstpostid
        AND thread.open = 1
        AND thread.visible = 1
        AND thread.replycount >= 1
        AND post.visible = 1
        AND (forum.options & 1)
        AND (forum.options & 2)
        AND (forum.options & 4)
        AND forum.forumid IN(1,2,3)
    GROUP BY post.threadid
    ORDER BY tdateline DESC, pdateline ASC

正如您所看到的,主要是我需要从'thread'表中选择线程的日期行,以及每个线程的第二个帖子的日期行,这些都在您在WHERE CLAUSE中看到的条件下。由于每个帖子都有很多帖子,而且我每个帖子只需要一个结果,所以我为此目的使用了GROUP BY CLAUSE。

此查询将仅返回一个帖子的日期行及其相关的唯一主题。

我的问题是:

  1. 如何限制返回的线程数 每个论坛!?假设我只需要5 线程 - 最大 - 是 为每个宣布的论坛返回 WHERE CLAUSE'forum.forumid IN(1,2,3)',这怎么可能 实现。
  2. 是否有任何建议 优化此查询(当然 在解决了第一点之后)?
  3. 备注:

    • 我不想使用子查询,但是 如果这是唯一可用的解决方案 我会接受的。双查询没有 推荐的。我确信这很聪明 这种情况的解决方案。
    • 我正在使用MySQL 4.1+,但如果你知道的话 只是,另一个引擎的答案 份额。

    提前获得建议:)

1 个答案:

答案 0 :(得分:1)

也许这个问题:"limit the number of rows to join to in mysql"或者更确切地说是指向How to select the first/least/max row per group in SQL的指针可能有所帮助。

尽管如此,这一切都归结为子查询。