台灣最大程式設計社群網站
線上人數
626
 
會員總數:245127
討論主題:189033
歡迎您免費加入會員
討論區列表 >> PHP >> MYSQL取得同群組中最新的資料
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
MYSQL取得同群組中最新的資料
價值 : 0 QP  點閱數:3895 回應數:0

樓主

皮皮快跑
中級專家
3387 23
5134 836
發送站內信

最近正好遇到一個類似的需求。
想想大概也會有版友會遇到類似的需求。
因為誤判定的做法常常會讓人產生誤會。
所以就趁此說明一下並提供語法參考。
--------------------------------------------------
狀況:
以資料庫某欄位為其群組索引,並取出其中最新的一筆資料。
群組欄位假設:使用者帳號:account
需要查詢假設:最新一筆訂單,欄位:order_no
解析:
這邊經常經誤用的就是MAX()這個功能。
很多人會想說在SELECT 中用MAX(order_no)
事實上這只是索引出order_no的最大值,卻不是找出他對應的整筆資料。
也因此你在群組後搜尋會發現出來的資料跟你想像的完全不符合。
這當中一個因素是因為你沒有下任何的排序條件時,資料根本就不符合你的條件。(就我測試時,資料根本就是亂排。)
另一個狀況是說,既使你下了GROUP BY和ORDER BY
他也是先GROUP BY做完,取得的資料再來做ORDER BY。
而並非是ORDER BY完後再取得資料。
換個結論來說,假設能做到先ORDER BY順序後,再GROUP BY,那麼每一次取得的第一筆群組資料就一定會是對的。
這當中的問題就在於「如何先做GRUOP BY排序」
語法:
最主要一個狀況就是,如果我們能先獲得排序過的表,再去做群組化的話。
那麼這個問題相對的就很好處理了。
也因此就產生這樣的語法範例了:

這當中其實就是讓排序過的資料形成一個table,再做一次真正的資料群組和查詢。
這麼一來你就可以取得群組中每個帳號最新一筆的訂單資料。
提供大家做為一個參考。
另外,如果說需要二個表的結合,在排序過後使用JOIN是不會有問題的。


本篇文章發表於2012-07-29 20:28
== 簽名檔 ==
發問的美學:
1.確定你的先備知識條件足夠,基礎該學習的就不應該問人。
2.先思考過或先google過。
3.明確表達問題。
4.表達明確,能詳細問題的code。
5.發問的問題,絕不刪除,留給其他遇到相同問題的人一個好的紀錄。
6.我的skypelinetkdmaf,歡迎直接詢問。
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
目前尚無任何回覆
   

回覆
如要回應,請先登入.