查詢表相關文章:mysql的ORDER_BY問題
select * from articles where article_id in(98,97,96,99)
返回的結果排序像
record 96 ...
record 97 ...
record 98 ...
record 99 ...
但我更喜歡的結果排序相同, '在(98,97,96,99)'。任何技巧,使其成爲可能? 謝謝。
查詢表相關文章:mysql的ORDER_BY問題
select * from articles where article_id in(98,97,96,99)
返回的結果排序像
record 96 ...
record 97 ...
record 98 ...
record 99 ...
但我更喜歡的結果排序相同, '在(98,97,96,99)'。任何技巧,使其成爲可能? 謝謝。
中功能受到在列表的大小有限制。更有可能的是,一旦列表達到幾百條,你的表現就會下降 - 你也可以單獨檢索記錄並在客戶端排序。
話雖如此,還有另一個MySQL函數,FIND_IN_SET你可能會考慮實現你的ORDER BY。但FIND_IN_SET最多隻能處理64個成員。
ORDER BY
FIND_IN_SET(article_id, '98,97,96,99')
我想這可能工作:
select * from articles where article_id in(98,97,96) order by article_id desc
union
select * from articles where article_id = 99
我看不到你的訂貨任何圖案,所以我想不出任何其他方式來做到這一點。
這看起來不可擴展到我,因爲article_id序列的順序可能是隨機的,因爲您說沒有模式。 – Shawn 2009-11-06 04:40:57
96,97,98,99看起來像一個模式給我! – 2009-11-06 04:46:23
@Shawn:如果您希望它具有可伸縮性,您可以動態構建查詢字符串: $ query =「select * from article whereid(」。$ in_list_1。「)order by article_id」。$ order1。「 union select * from article where article_id in(。「$ in_list_2」。)order by article_id「。$ order2 – FrustratedWithFormsDesigner 2009-11-06 04:49:54
您也許能夠做這樣的事情:
select * from articles where article_id in(98,97,96,99) order by article_id == 98 desc, article_id == 97 desc, article_id == 96 desc, article_id == 99 desc;
不可擴展。如果我有500個ID,則查詢可能會變胖。 – Shawn 2009-11-06 04:57:05
你能否多說一點'問題域'?每個查詢的IN列表是否不同?無論ORDER BY方面如何,使用IN列表拉回數百行都不會縮小那麼遠。 – 2009-11-06 07:04:35