我試圖將對話之類的消息進行分組,並僅顯示來自對話的最新消息,因此我需要列time
中列數最多的消息。MySQL Group by and Order
這是我的查詢:
SELECT *
FROM console_msgs
WHERE `to` = $user[id]
GROUP BY `from`
ORDER BY time DESC
感謝您的幫助!
我試圖將對話之類的消息進行分組,並僅顯示來自對話的最新消息,因此我需要列time
中列數最多的消息。MySQL Group by and Order
這是我的查詢:
SELECT *
FROM console_msgs
WHERE `to` = $user[id]
GROUP BY `from`
ORDER BY time DESC
感謝您的幫助!
SELECT console_msgs.*
FROM console_msgs NATURAL JOIN (
SELECT MAX(time) AS time
FROM console_msgs
WHERE `to` = $user[id]
GROUP BY `from`
) t
WHERE `to` = $user[id]
我不太明白您需要返回的結果集,但我認爲您需要使用LIMIT關鍵字才能返回最高結果。這給一試:
SELECT from, MAX(time)
FROM console_msgs
WHERE `to` = $user[id]
GROUP BY `from`
ORDER BY time DESC
LIMIT 1
我認爲OP希望來自*每個*發件人的最新消息,而不僅僅是最新的消息(您的答案甚至可能不會這樣做,因爲所選的「時間」值是不確定的)。 – eggyal
你不會想用GROUP BY
達到什麼我想你問。你只是想多個訂單bys
SELECT *
FROM console_msgs
WHERE `to` = $user[id]
ORDER BY `from`, time DESC
你可以發佈/包含你的表結構,以便每個人都可以看到涉及的表。 –
我們可能需要您的模式定義,以及一些示例數據和結果。永遠不要使用'SELECT *' - 總是明確地定義你想要的結果。命名事物時避免使用保留字 - 「from」可能會重命名爲「sentBy」或其他東西。不要不必要地縮寫,這隻會讓閱讀變得更加困難。不要在他們的類型之後命名列,在它們代表的內容之後命名它們 - 即「time」代表「sentAt」還是「receivedAt」?請注意,雖然在mySQL中是合法的,但在使用GROUP BY時選擇非聚合列具有「隨機」值。 –