【问题标题】:MySQL query for last rows that have a specific field [duplicate]MySQL查询具有特定字段的最后一行[重复]
【发布时间】:2013-12-15 10:18:30
【问题描述】:

我有一张这张桌子:

posts
id    | msg        | topicId
 1    | Hello World| 1
 2    | Whats up?  | 2
 3    | lorem ipsum| 1
 4    | new Topic  | 3
 5    | Dolor sit  | 1
 6    | some text  | 3
 7    | response   | 2
 8    | asdf       | 3

我想为每个topicId 获得最大id 的行,如下所示:

result
id    | msg        | topicId
 5    | Dolor sit  | 1
 7    | response   | 2
 8    | asdf       | 3

我的问题是我不知道如何查询我想要的结果。 我正在使用 symfony 2.3 和教义,所以如果您可以使用教义查询生成器代码来获得答案,那就太好了:)

有什么办法可以有效地做到这一点吗?

【问题讨论】:

  • 重复问题显示了如何使用常规 MySQL 进行操作。我不知道 Doctrine,但你应该能够在那里翻译解决方案。你也可以在 SO 中搜索[mysql] [greatest-n-per-group],也许其他一些问题使用 Doctrine。这是一个非常常见的问题。
  • 抱歉重复了。我不知道要搜索什么

标签: php mysql sql symfony doctrine-orm


【解决方案1】:
SELECT m1.*
FROM YourTable T1
    LEFT JOIN YourTable T2 ON (T1.id= T2.id AND T1.TopicId < T2.TopicId)
WHERE T2.id IS NULL;

【讨论】:

  • 此解决方案完美运行!现在我只需要在学说查询生成器中执行此操作 :)
  • 我不知道这是如何解决您的问题的,它会给出未知的表 m1,即使您将其更改为 t1,它也会给出所有行 look here
【解决方案2】:

这是一条路

SELECT
posts.*
FROM
posts
JOIN (
SELECT MAX(id) AS id ,`msg`  , topicId
FROM posts 
GROUP BY `topicId`
) maxid

 ON posts.`topicId` = maxid.`topicId` 
    AND posts.id = maxid.id

DEMO HERE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 2011-08-11
    • 2014-05-04
    • 1970-01-01
    相关资源
    最近更新 更多