【问题标题】:MySQL LIMIT 1 on second table with INNER JOINMySQL LIMIT 1 在第二个表上使用 INNER JOIN
【发布时间】:2010-11-27 11:17:55
【问题描述】:

我正在使用此查询来打印论坛板及其所有子论坛。正如所料,会显示属于该论坛的所有线程中的所有帖子。我想要发生的只是每个线程的第一个帖子与论坛标题一起显示。

查询:

选择 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)的答案,如果我在第二个表中使用帖子编号字段,我该怎么办?例如,线程中的第一个帖子有数字 1,第二个帖子有数字 2,等等。如果我使用这种方法,我显然只想选择计数字段为 1 的帖子。我可以用 AND post_number=1 扩展原始查询对吗?

感谢阅读,

詹姆斯

【问题讨论】:

    标签: mysql inner-join


    【解决方案1】:

    这样的?

    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)
    

    【讨论】:

    • 几乎完美!但是,我是一个真正的 MySQL 菜鸟,所以您能告诉我如何将这种方法整合到我的原始查询中吗?请:-)
    • 非常感谢您的帮助,但这不起作用。就像我在 OP 中所说的那样,我将使用数据库中的帖子编号字段。很抱歉浪费您的时间。我将把它标记出来,但不是正确的答案 - 虽然它只是拒绝为我工作,但很好。
    猜你喜欢
    • 2013-03-02
    • 2018-05-10
    • 2015-02-14
    • 2021-01-18
    • 2015-01-11
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    相关资源
    最近更新 更多