2012-06-07 28 views
25

ランダム化のステップがあるので、クエリを実行するまでわからないことで注文するアイテムの固定リストを用意します。固定リストによるmysqlの注文

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

達成するためにどのように任意のアイデア:

がis_launch_setは1,3,7,11を返しますが、以下に無作為に割り付けされていることを前提としています

私は次のようなものを持っていると思いますこの?私はおそらくfind_in_setを考えていたが、本当に確実ではなかった。

+0

を可能な重複:[いくつかのリストによるMySQLのソート](のhttp:// stackoverflowの.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

あなたはset in findが動作することを確信していますか?私がquesitonに尋ねる前に、それは答えがあると思ったものですが、注文は毎回異なっているようです。設定やその他の設定はありますか?フィールドの答えはよく見えます。 – timpone

+0

@timpone:私はそれが動作すると確信しています。 'FIND_IN_SET(id、 '3,11,7,1')'を 'SELECT'に入れて、期待通りの結果を返すようにすることができます。 – zerkms

+1

これらのアプローチのうち最も速いものはどれですか? 'id'フィールドにインデックスを追加する以外にスピードアップする方法はありますか? –