关于php:MySQL查询具有特定字段的最后一行

MySQL query for last rows that have a specific field

本问题已经有最佳答案,请猛点这里访问。

我有一张这张桌子:

1
2
3
4
5
6
7
8
9
10
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的行,如下所示:

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

我的问题是我不知道如何查询我想要的结果。
我正在使用symfony 2.3和doctrine,所以如果你可以使用doctrine查询构建器代码来获得很棒的答案:)

有没有想过有效地做到这一点?


1
2
3
4
SELECT m1.*
FROM YourTable T1
    LEFT JOIN YourTable T2 ON (T1.id= T2.id AND T1.TopicId < T2.TopicId)
WHERE T2.id IS NULL;


这是一种方法

1
2
3
4
5
6
7
8
9
10
11
12
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

在这里演示