2017-03-14 6 views
0

(非常に大きい)文字列で表示される順番で結果を注文したいと思います。この質問のために、私はその文字列を5項目に制限しました。例えばMySQL:ORDER BYの値の文字列での位置

select * from table where value in ("banana","apple","pineapple","cherry","mango") 

私は、彼らがその文字列に表示される順序によって、それらの結果を注文したいと思います。明らかにCASE WHENなどで可能なのは5つの結果だけですが、もっと長い文字列(例:1000値)ではどうしてそうは不可能でしょうか?

ありがとうございました。

答えて

1

あなたがわずかに異なるクエリ

SELECT * 
FROM table 
WHERE value IN ("banana","apple","pineapple","cherry","mango") 
ORDER BY FIND_IN_SET(value, 'banana,apple,pineapple,cherry,mango') 

FIND_IN_SET(str, strlist)

FIND_IN_SET()を使用することができ、文字列strが 文字列リストstrlistであればNの1の範囲の値を返します。 N個の部分文字列で構成されます。文字列リストは、文字で区切られた部分文字列で構成される 文字列です。最初の 引数が定数文字列で、2番目がSET型の列の場合、 FIND_IN_SET()関数はビット演算を使用するように最適化されています。 strlistにstrlistがない場合、またはstrlistが空の文字列の場合は、 を返します。いずれかの引数がNULLの場合は、 を返します。この関数は、最初の引数にコンマ(、)文字が含まれている場合、正しく動作しません。

mysql> SELECT FIND_IN_SET('b','a,b,c,d'); 
    -> 2 
+0

おかげで、それは完璧だ - 私は単にFIND_IN_SET引数でyの文字列の書式設定を台無しにしたいように見えます。乾杯。 – huey

+0

よろしくお願いします!あなたの問題を解決する助けがあれば、この回答を受け入れてください。 –

関連する問題