2013-12-15 68 views
1

我有這個表:我想用最大的id行,每topicId這樣MySQL查詢爲具有特定領域的最後一個行

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 

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

我問題是我沒有線索如何查詢我想要的結果。 我使用symfony 2.3和學說,所以如果你可以使用原則查詢生成器代碼的答案將是偉大的:)

任何想法有效地做到這一點?

+0

重複的問題顯示瞭如何與普通的MySQL做。我不知道學說,但你應該能夠翻譯那裏的解決方案。你也可以在SO上搜索'[mysql] [最大每個組],也許其他一些問題使用Doctrine。這是一個極其常見的問題。 – Barmar

+0

對不起,重複。我不知道要搜索什麼 – Kable

回答

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

此解決方案完美無缺!現在我只需要在教條查詢生成器:) – Kable

+1

我不知道這是如何解決你的問題的方式,它會給未知的表m1,即使你改變它爲t1它會給所有行[看這裏]( http://sqlfiddle.com/#!2/ff4914/4) –

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