2012-06-07 83 views
25

我將有一個固定的項目列表來排序,我不會知道,直到我運行查詢,因爲有一個隨機化步驟。mysql按固定列表排序

我想有類似以下內容:

假設is_launch_set將返回1,3,7,11但都被隨機分爲如下:

select * from items where is_launch_set=1 order by id values (3,11,7,1); 

如何實現任何想法這個?我想也許是一個find_in_set,但不是很確定。

+0

可能重複:[MySQL的排序名單的一些(HTTP://計算器.com/questions/6810793 /),雖然這一個吸引了更徹底的答案。 –

回答

55

你可以做,通過使用:

ORDER BY FIND_IN_SET(id, '3,11,7,1') 

ORDER BY FIELD(id, 3, 11, 7, 1) 

ORDER BY CASE id WHEN 3 THEN 0 
       WHEN 11 THEN 1 
       WHEN 7 THEN 2 
       WHEN 1 THEN 3 
         ELSE 4 
     END 
+1

你確定集合中的find會起作用嗎 - 在我問quesiton之前,這就是我認爲答案會是的,但每次的排序都不一樣。有沒有配置設置或其他任何東西。現場答案看起來不錯。 – timpone

+0

@timpone:我確定它可以工作。您可以將'FIND_IN_SET(id,'3,11,7,1')'放到'SELECT'中,以確保它返回預期的結果 – zerkms

+1

您是否有任何有關這些方法中哪一個表現最快的信息?除了在'id'字段中加入索引之外,還有什麼方法可以加快速度? –