MySQLのIN - 内の値BY ORDER()
-
12-09-2019 - |
質問
私はアイテムをソートするために望んでいるの注文は、彼らがIN()関数を締結しています。
で、次のクエリで返さINPUTます:
SELECT id, name FROM mytable WHERE name IN ('B', 'A', 'D', 'E', 'C');
OUTPUTます:
| id | name |
^--------^---------^
| 5 | B |
| 6 | B |
| 1 | D |
| 15 | E |
| 17 | E |
| 9 | C |
| 18 | C |
任意のアイデア?
解決
SELECT id, name
FROM mytable
WHERE name IN ('B', 'A', 'D', 'E', 'C')
ORDER BY FIELD(name, 'B', 'A', 'D', 'E', 'C')
分野の機能は、位置を返します文字列の残りのリストの最初の文字列のます。
しかし、それはあなたのソート順を表し、インデックス付きの列があり、その後、ソート、このコラムでするより良いパフォーマンスが賢明です。
他のヒント
ここから別のオプション: http://dev.mysql.com/doc/refman/5.0 /en/sorting-rows.htmlする
select *
from tablename
order by priority='High' DESC, priority='Medium' DESC, priority='Low" DESC;
だからあなたの場合には(未テスト)
になりますSELECT id, name
FROM mytable
WHERE name IN ('B', 'A', 'D', 'E', 'C')
ORDER BY name = 'B', name = 'A', name = 'D', name = 'E', name = 'C';
によって何をやっている私はそれが少し風変わり見つかりましたが、常に、それはそれで少し遊んだ後動作するようになってきました。
タグのようなものを試してみてください
... ORDER BY (CASE NAME WHEN 'B' THEN 0 WHEN 'A' THEN 1 WHEN ...
これは(p_CustomerIdがSPに渡された)誰かを助けることができるかもしれませ。
SELECT CompanyAccountId, CompanyName
FROM account
LEFT JOIN customer where CompanyAccountId = customer.AccountId
GROUP BY CompanyAccountId
ORDER BY CASE WHEN CompanyAccountId IN (SELECT AccountId
FROM customer
WHERE customerid= p_CustomerId)
THEN 0
ELSE 1
END, CompanyName;
説明:私は、アカウントのリストを表示したいです。ここで私は、SPで顧客IDを渡しています。今ではアルファベット順に他のアカウントが続く上部に表示される顧客にリンクされたアカウントのアカウント名の一覧が表示されます。
あなたはソート順を指定したテーブル内の別の列(数値)を、必要とします。 IN句は、このように動作しません。
B - 1
A - 2
D - 3
E - 4
C - 5
単に使用
order by INSTR( ',B,C,D,A,' , concat(',' , `field`, ',' ) )
タグのような事態を避けます
INSTR('1,2,3,11' ,`field`)
順不同結果の行で終了します:1と11、交代
所属していません StackOverflow