12

MySQLSELECTステートメントに任意の順序を指定することは可能ですか? 例えば、

SELECT * FROM table_name WHERE id IN (1, 3, 2, 9, 7) ORDER BY (1, 3, 2, 9, 7);

直後にリストされている番号の順序はIN問題ではないようです。

4

3 に答える 3

18

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 関数の文字列引数にスペースがないことに注意してください。

于 2010-12-01T17:33:19.863 に答える
6

mysql のORDER BY FIELDを確認してください。私はそれがあなたが望むことを正確に行うと思います。

于 2010-12-01T18:58:11.420 に答える
2

簡単な答え:

別の「順序付け」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
于 2010-12-01T17:39:40.387 に答える