1

私はこの注文を持っています-問題によって私はクラックすることができません。私はこのように私のテーブルから選択します:

SELECT * FROM 'sidemodules' WHERE name = 'module1' OR name = 'module2' OR 'name3'

これで、必要なモジュールが返されます。しかし、モジュールはテーブルにあり、次の順序で言います。

  1. モジュール3
  2. モジュール1
  3. モジュール2

そして、それらはこの順序で私に返されます。WHERE条項(1,2,3)のように順番に表示するにはどうすればよいですか?

4

4 に答える 4

2

私はあなたが探していると思いますFIELD

SELECT * FROM sidemodules
WHERE name IN ('module1', 'module2', 'name3')
ORDER BY FIELD(name, 'module1', 'module2', 'name3')

とにかく、名前がアルファベット順の場合は、次を使用してください。

ORDER BY name

INまた、演算子の使用は通常、多くのを使用するよりも高速であることに注意してくださいOR

于 2012-04-15T17:06:31.453 に答える
1

句ごとにFIELDを使用する必要があります。返品セットは、あなたが書いたのと同じ順序になります。

SELECT * FROM sidemodules
WHERE name IN ('module1', 'module2', 'name3')
ORDER BY FIELD(name, 'module1', 'module2', 'name3')

結果:module1、module2、name3

SELECT * FROM sidemodules
WHERE name IN ('module1', 'module2', 'name3')
ORDER BY FIELD(name, 'module2', 'module1', 'name3')

結果:module2、module1、name3

于 2012-04-15T17:18:59.820 に答える
0

質問にタイプミスがあると思います。あなたの最後の条件name = 'module3'はただの代わりでなければなりませんname3

次のことを試してください。

SELECT * 
FROM 'sidemodules' 
WHERE name = 'module1' OR name = 'module2' OR name = 'module3'
ORDER BY name;
于 2012-04-15T17:06:58.510 に答える
0

固定注文の場合は、CASEステートメントを使用して注文できます。

SELECT * FROM 'sidemodules' 
WHERE name = 'module1' 
  OR name = 'module2' 
  OR name = 'module3'
ORDER BY CASE
  WHEN name = 'module1' THEN 1
  WHEN name = 'module3' THEN 2
  WHEN name = 'module2' THEN 3
 ELSE '0'
END
于 2012-04-15T17:08:56.550 に答える