mysql按值排序

时间:2013-07-10 13:51:11

标签: mysql sql sql-order-by

我有一个产品列表,其中有一列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

不起作用。

任何建议

2 个答案:

答案 0 :(得分:2)

您可以使用MySQL的FIELD()功能:

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

sqlfiddle上查看。

答案 1 :(得分:2)

尝试这种方式:

SELECT * FROM Product 
ORDER BY
case CategoryID
  when  5 then 0
  when  2 then 1
  else 2
end
, ID