admin

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

sql

我有某种情况需要从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

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

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

我的问题是:

  1. 如何限制每个论坛的返回线程!?假设我只需要5个线程(作为最大线程数)就可以在WHERE CLAUSE’forum.forumid IN(1,2,3)’中声明的每个论坛返回。
  2. 有什么建议可以优化此查询(当然,在解决了第一点之后)?

笔记:

  • 我不想使用子查询,但是如果它是唯一可用的解决方案,我会接受。不建议重复查询。我确信对于这种情况有一个明智的解决方案。
  • 我使用的是MySQL 4.1+,但如果您知道其他引擎的答案,请分享。

提前提出建议:)


阅读 151

收藏
2021-06-07

共1个答案

admin

也许这样的问题:“限制在mysql中要加入的行数”,或更确切地说,指向如何在SQL中选择每个组的第一/最小/最大行的指针可能会有所帮助。

尽管我认为这全都归结为子查询。

2021-06-07