【问题标题】:Mysql - LEFT JOIN - get first entryMysql - LEFT JOIN - 获取第一个条目
【发布时间】:2014-10-10 09:38:24
【问题描述】:

MySql 中有这个结构

我想得到:

第一篇文章,来自最后一个主题,类别为“新闻”

在此示例中,它是来自帖子的行,其中 id = 2,如图像上标记的那样

到目前为止,我得到了这个查询:

SELECT *
FROM forum_post AS p 
LEFT JOIN forum_topic AS t ON p.topic_id = t.id
LEFT JOIN forum_category AS c ON t.category_id = c.id
WHERE c.title = 'News' AND t.id = MAX(t.id)
ORDER BY p.id ASC LIMIT 1

编辑:

肮脏的解决方案:

SELECT * FROM forum_post
WHERE topic_id = (SELECT MAX(id) FROM forum_topic WHERE category_id = 1)
ORDER BY id ASC LIMIT 1

【问题讨论】:

  • 最后一个主题 = Max(Topic_Id) ?
  • 是的,最后一个主题将始终位于表格末尾
  • @Ing.MichalHudak 查看 sqlfiddle.com

标签: mysql left-join greatest-n-per-group


【解决方案1】:

您仍然可以使用联合查询而不是子查询来获取您类别的最后一个主题的第一篇文章,请注意,连接中的子查询将只运行一次以获取结果集,并且在您的情况下,子查询将为每次迭代运行

SELECT * FROM
forum_post AS p 
  JOIN 
    (SELECT 
      t.id 
    FROM
      forum_topic AS t 
      JOIN forum_category AS c 
        ON t.category_id = c.id 
    WHERE c.title = 'News' 
    ORDER BY t.id DESC 
    LIMIT 1) t
  ON p.topic_id = t.id 
ORDER BY p.id ASC 
LIMIT 1 

【讨论】:

    【解决方案2】:
    select fp.* from forum_post fp,
    (select min(fp.id) from forum_post fp where topic_id in 
     (select max(ft.id) from forum_topic ft inner join forum_category fc 
         on fc.id = ft.category_id where fc.title = 'News'))T 
    where fp.id = T.id
    

    [如果没有论坛帖子,则不返回任何行]

    编辑: 更新了【虽然没试过执行】

    【讨论】:

    • #1052 - 字段列表中的列“id”不明确
    【解决方案3】:

    我没有测试过,但应该是这样的:

    SELECT fm.remply
    FROM forum_topic ft
    JOIN forum_category fc
        ON ft.category_id = fc.category_id
        AND fc.title = 'News'
    JOIN forum_post fm
        ON ft.id = fm.topic_id
    ORDER BY ft.id DESC
            ,fm.id DESC
    LIMIT 1
    

    【讨论】:

      猜你喜欢
      • 2013-05-14
      • 2016-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多