2012-09-16 161 views
3

我不擅長Mysql表達式,所以這裏是一個簡單的問題,我試圖讓我的腦海裏浮現出來。我想要顛倒GROUP BY表達式的順序,以便我可以獲取用戶的最後一個條目。MySQL反向GROUP BY結果

我設法在互聯網上找到很好的例子,但是我不能在沒有收到錯誤的情況下用我的表達來實現它們。多謝你們!

SELECT messages.conv, messages.from_user, messages.to_user, 
     messages.content, messages.date_posted, messages.note_read, 
     messages.active, users.thumb, users.name, users.id 
FROM `messages` 
INNER JOIN `users` 
    ON messages.from_user = users.id 
WHERE messages.from_user = 1 
    OR messages.to_user = 1 
GROUP BY messages.conv 
ORDER BY date_posted ASC 
+0

什麼是錯誤 –

+0

沒有錯誤,我只想在GROUPED BY行中輸入LAST條目。默認情況下,GROUP BY將第一個作爲組合條目的基礎。 – Ando

回答

4

編輯:我顯然誤解了你的要求,你目前的查詢將返回一個僞隨機行因您的GROUP BY沒有任何聚集,你想要的是最後一排的每個對話這將是更多的東西一樣(假設messages,如users,有一個自動增量主鍵id);

SELECT messages.conv, messages.from_user, messages.to_user, 
     messages.content, messages.date_posted, 
     messages.note_read, messages.active, users.thumb, 
     users.name, users.id FROM `messages` 
INNER JOIN `users` 
     ON messages.from_user = users.id 
WHERE messages.id IN 
     (SELECT MAX(id) FROM messages 
     WHERE messages.from_user = 1 OR messages.to_user = 1 
     GROUP BY conv); 

SQLFiddle here

+1

另外,省略'GROUP BY',因爲沒有像COUNT,SUM,MIN或MAX這樣的集合函數。 –

+0

@KenKeenan好點,我總是忘記MySQL允許沒有集合函數的GROUP BY。 –

+0

我需要通過組中的最後一個條目,它與ORDER BY無關。那就是問題 – Ando