2013-12-15 2 views
1

у меня есть эта таблица: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 

Я хочу, чтобы получить строку с наибольшим id для каждого topicId, как это:

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

Мои проблема в том, что я не имею понятия, как запросить результат, который я хочу. Я использую symfony 2.3 и doctrine, поэтому, если бы вы могли использовать код построения запроса доктрины для ответа, который был бы замечательным :)

Любая идея для этого эффективно?

+0

Дубликат вопрос показывает, как сделать это с обычным MySQL. Я не знаю Доктрины, но вы должны иметь возможность переводить там решения. Вы также можете выполнить поиск SO для '[mysql] [наибольший-n-per-group]', возможно, некоторые из других вопросов используют 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

Смежные вопросы