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 回答