WEBページで選択された複数の商品IDを選択された順に並べてAjaxで送信、
サーバー側でデータを取得してWEB側に返す。という処理を作成していました。
以前に似たような画面を作成したときは、SQLでデータ取得後にforeachで並び替えるという若干違和感のある方法を取っていました。
ただ改めて作成することとなり、SQL単体で並び替える方法がないかと調べると案外あっさりと見つかりました。
実際の方法
SELECT
items.item_id,
items.item_item_name
FROM
items
WHERE
items.item_id IN (1, 5, 16, 7, 2)
ORDER BY
FIELD(items.item_id, 1, 5, 16, 7, 2)
出てくるもの
item_id | item_name |
1 | カメラ |
5 | パソコン |
16 | イヤホン |
7 | 充電器 |
2 | ケーブル |
WHEREで指定しないとORDER BYで指定されていない[item_id]が出力された。
この指定されていない[item_id]の出力される順番がどのような規則性をもって並べられたのかがわからなかったです。
FIELD()を使用する際はWHEREなどと併用するのが基本かと思います。
ちなみにDESCを入れるとちゃんと指定した[item_id]とは逆に並んでくれました。
ORDER BYは昇順降順だけかと思っていたのですが、探せばほかにもいろいろありそうです。