1

主キーとして ID 列を持ち、外部キーであるカテゴリ ID を持つ製品のリストがあります。特定の方法でそれらを上書きしたいと考えています。

ID    |   Name   | CategoryID
----------------------------
1     | one      | 1
2     | two      | 2
3     | three    | 1
4     | four     | 3
5     | five     | 5 
6     | six      | 4
7     | seven    | 2
8     | eight    | 1

上記が私のテーブルの場合。次のようなSQLでそれらを取得したい

カテゴリ 5 のすべての製品が最初に表示される必要がある特定の方法でこれらの製品を注文する場合、次のようなクエリを実行しています。

SELECT * FROM Product ORDER BY CategoryID IN (5), ID

これはうまく機能します。

しかし今、私は最初にカテゴリID 5を表示し、次にカテゴリID 2を最初に表示し、残りを表示する必要があります

私が試したら

SELECT * FROM Product ORDER BY CategoryID IN (5), CategoryID IN (2), ID ASC

それはうまくいきません。

助言がありますか

4

2 に答える 2

2

MySQL のFIELD()関数を使用できます。

SELECT * FROM Product ORDER BY FIELD(CategoryID, 2, 5) DESC

sqlfiddleで参照してください。

于 2013-07-10T13:55:37.333 に答える
2

この方法を試してください:

SELECT * FROM Product 
ORDER BY
case CategoryID
  when  5 then 0
  when  2 then 1
  else 2
end
, ID
于 2013-07-10T13:56:43.363 に答える