代码之家  ›  专栏  ›  技术社区  ›  Bojangles Vincent Baillet

MySQL限制第二个带有内部联接的表为1

  •  3
  • Bojangles Vincent Baillet  · 技术社区  · 14 年前

    我用这个查询打印出一个论坛板和所有的子论坛。正如预期的那样,所有属于论坛的主题中的所有帖子都会被显示出来。我想发生的只是每个线程的第一篇文章与论坛标题一起显示。

    查询:

    SELECT tf_threads.*, tf_posts.* 
        FROM tf_threads INNER JOIN tf_posts 
        ON tf_threads.thread_id=tf_posts.thread_id 
            AND tf_threads.parent_id=54 ORDER BY tf_posts.date ASC

    请注意 parent_id 字段是在实际查询中给定的变量。

    所以。如果我有道理,有人能帮我找出只从每个线程中选择第一个日志的查询吗?

    如果没有简单的(ish)答案,那么如果我在第二个表中使用了post-number字段,我该怎么做呢?例如,thread中的第一个post有数字1,second post有数字2,等等。如果我使用这种方法,我显然只想选择count-number字段为1的post。我可以用 AND post_number=1 正确的?

    谢谢你的阅读,

    詹姆斯

    1 回复  |  直到 14 年前
        1
  •  2
  •   thejh    14 年前

    像这样?

    http://murrayhopkins.wordpress.com/2008/10/28/mysql-left-join-on-last-or-first-record-in-the-right-table/

    编辑: 我认为应该是这样的,但我也不是SQL专家:

    SELECT tf_threads.*, tf_posts_tmp.*
    FROM tf_threads
    LEFT JOIN (SELECT p1.*
               FROM tf_posts as p1
               LEFT JOIN tf_posts AS p2
               ON p1.postid = p2.postid AND p1.date < p2.date) as tf_posts_tmp
    ON (tf_threads.thread_id=tf_posts_tmp.thread_id)