回答:
SELECT id, name
FROM mytable
WHERE name IN ('B', 'A', 'D', 'E', 'C')
ORDER BY FIELD(name, 'B', 'A', 'D', 'E', 'C')
FIELDの関数は、文字列の残りのリストの最初の文字列の位置を返します。
ただし、並べ替え順序を表すインデックス付きの列を作成してから、この列で並べ替えることをお勧めします。
FIELD(letter, 'A', 'C')
、リストは最初にB文字のエントリを最初に返します(A | B | C
値のあるレコードのセットを想定しています)。これを回避するには、リストを逆にしてDESC、つまりを使用しますFIELD(letter, 'C', 'A') DESC
。
ここからの別のオプション: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 ...
これは誰かを助けることができるかもしれません(SPでp_CustomerIdが渡されます):
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