使用SELECT WHERE IN()時,有沒有辦法保持順序?例如,使用以下查詢:如何使用SELECT WHERE IN()保持訂單?
SELECT id FROM data_table WHERE id IN(56,55,54,1,7);
結果將使用id默認順序返回。 1,7,54,55,56
當我想保持在所使用的順序:56,55,54,1,7
是否有一個快速的方式在MySQL或將做到這一點我不得不在代碼中訂購它。
謝謝:)
使用SELECT WHERE IN()時,有沒有辦法保持順序?例如,使用以下查詢:如何使用SELECT WHERE IN()保持訂單?
SELECT id FROM data_table WHERE id IN(56,55,54,1,7);
結果將使用id默認順序返回。 1,7,54,55,56
當我想保持在所使用的順序:56,55,54,1,7
是否有一個快速的方式在MySQL或將做到這一點我不得不在代碼中訂購它。
謝謝:)
使用FIND_IN_SET:
ORDER BY FIND_IN_SET(id, '56,55,54,1,7')
你可以做一個UNION,可能返回的順序相同的方式。
但是:
爲什麼不只是當它接收他們,而不是強迫DB做你的應用程序重新排序的結果?
數據庫將比您的應用程序能夠更好地擴展順序。 10條記錄不算什麼 - 如果結果集爲10,000或數百萬個,那該怎麼辦? – 2010-05-11 19:41:26
您還可以使用領域:
ORDER BY FIELD(id, '56,55,54,1,7')
這沒有按預期工作,如果列表中有混合順序(不是所有新月或新月),「FIND_IN_SET」而不是尊重列表的確切順序 – WonderLand 2014-04-17 16:32:54
+1 - 我從來沒有想過這個問題。好主意 – 2010-05-11 19:40:54
謝謝!那很快。它工作完美:) – Pepper 2010-05-11 19:41:24
一個問題,這會導致查詢使用文件。我應該關心使用這種方法的性能嗎?或者這是一個不同線程的問題? – Pepper 2010-05-11 19:44:10