MySQLSELECT
ステートメントに任意の順序を指定することは可能ですか? 例えば、
SELECT * FROM table_name WHERE id IN (1, 3, 2, 9, 7) ORDER BY (1, 3, 2, 9, 7);
直後にリストされている番号の順序はIN
問題ではないようです。
MySQLSELECT
ステートメントに任意の順序を指定することは可能ですか? 例えば、
SELECT * FROM table_name WHERE id IN (1, 3, 2, 9, 7) ORDER BY (1, 3, 2, 9, 7);
直後にリストされている番号の順序はIN
問題ではないようです。
FIND_IN_SET 関数はトリックを行います
SELECT * FROM table_name WHERE id IN (1, 3, 2, 9, 7) ORDER BY FIND_IN_SET(id, '1,3,2,9,7');
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set
編集: find_in_set 関数の文字列引数にスペースがないことに注意してください。
mysql のORDER BY FIELDを確認してください。私はそれがあなたが望むことを正確に行うと思います。
簡単な答え:
別の「順序付け」int フィールドを使用してデータを計測し、そのフィールドで ORDER BY を実行します。ほとんどの場合、これで十分です。-1 や -99 などの低い値を注文フィールドに適用することで、クライアントが特定の製品を特集リストなどにバブルアップできるようにすることができました。
複雑な答え:
これは、その順序を正規化したい場合に適用されます。また、順序の 2 番目の要素として別のフィールドがある場合、それは既にメイン テーブルにあります。これは、メモなど、各注文ポイントに関連する他の情報がある場合にも役立ちます。または、多数のテーブルがこの任意の順序を実装する予定であり、その順序を 1 か所から調整/変更する必要がある場合。
あなたがすることは、結合できるテーブルに「任意の」順序を置き、そのフィールドで順序付けすることです。
SELECT t.*, o.ordering
FROM table_name AS t
LEFT JOIN table_name_ordering AS o ON t.ordering_id = o.id
ORDER BY o.ordering, t.other_field