8

MySQL の結果をそれぞれ WHERE idIN (...) 句で並べ替える簡単な方法はありますか? 例:

SELECT * FROM articles WHERE articles.id IN (4, 2, 5, 9, 3)

戻る

Article with id = 4
Article with id = 2
Article with id = 5
Article with id = 9
Article with id = 3

そしてまた

SELECT * FROM articles WHERE articles.id IN (4, 2, 5, 9, 3) LIMIT 2,2

戻る

Article with id = 5
Article with id = 9

WHERE articles.id IN (4, 2, 5, 9, 3)更新: より具体的に言うと、これらの ID は動的で自動的に順序付けられるため、括弧内のデータの改ざんを避けたいと考えています。

4

4 に答える 4

14

ええ、種類:

SELECT * FROM articles
WHERE articles.id IN (4, 2, 5, 9, 3)
ORDER BY FIND_IN_SET(articles.id, '4,2,5,9,3')

しかし、これは非標準の SQL であり、少しにおいがします。

于 2010-06-02T13:41:29.527 に答える
3

これは私にとってはうまくいきます: ORDER BY FIELD(Product.id、4,9,8,5,3,11,24,16)

于 2012-11-27T12:05:11.720 に答える
1

MySQLはORDERBYでのみソートします。これが、データベーステーブルに通常の列のようなものがあることはそれほど珍しいことではない理由です。

articles
+----+------------+-------+
| id | ordinality | (...) |
+----+------------+-------+
|  2 |          2 |    '' |
|  3 |          5 |    '' |
|  4 |          1 |    '' |
|  5 |          3 |    '' |
|  9 |          4 |    '' |
+----+------------+-------+

SELECT *
  FROM articles
 WHERE articles.id IN (4, 2, 5, 9, 3)
 ORDER BY articles.ordinality
于 2010-06-02T13:31:05.030 に答える
0

私はあなたがそれをすることができないと思います。「明示的な」注文は行われていません。「in」ステートメントは、何を取得するかを示すだけであり、順序に関する情報はありません。

あなたが与えた例には明確な順序がないので、あなたの最善の策は、結果が返された後にコードでこれを処理することです。

于 2010-06-02T13:29:05.270 に答える