我希望按照特定顺序进行排序。我知道可以修改整个数据库,但那样就需要修改整个代码库了。
我的问题是,我在数据库中的一个名为 'games' 的表格中有一列名为 'status'。
因此...
SELECT *
FROM games
ORDER BY status ASC -- Will retrieve results going from 0 then 1 then 2
我需要的是能够按照1、0、2的顺序排序。您有什么想法吗?
我希望按照特定顺序进行排序。我知道可以修改整个数据库,但那样就需要修改整个代码库了。
我的问题是,我在数据库中的一个名为 'games' 的表格中有一列名为 'status'。
因此...
SELECT *
FROM games
ORDER BY status ASC -- Will retrieve results going from 0 then 1 then 2
如果我理解正确,使用 CASE 表达式:
SELECT g.*
FROM GAMES g
ORDER BY CASE g.status
WHEN 0 THEN 1
WHEN 1 THEN 2
WHEN 2 THEN 3
END
SELECT g.*
FROM GAMES g
ORDER BY FIND_IN_SET(g.status, '0,1,2')
SELECT g.*
FROM GAMES g
ORDER BY FIELD(g.status, 0, 1, 2)
SELECT *
FROM games
ORDER BY FIELD(status, 1, 0, 2)
但是最好能更详细地解释一下你想做什么,即你的表格包含哪些内容。
CREATE TABLE VAL_GAME_STATUS -- Oracle format - modify as needed for other DB
(STATUS NUMBER PRIMARY KEY,
DESCRIPTION VARCHAR2(50) NOT NULL UNIQUE,
SORT_ORDER NUMBER NOT NULL UNIQUE);
鉴于此,从GAMES获取排序结果的查询如下:
SELECT g.*
FROM GAMES g
INNER JOIN VAL_GAME_STATUS s
USING (STATUS)
ORDER BY s.SORT_ORDER;
我本来也想发与OMG Ponies相同的方法,所以+1。这是我学习这种技术的有用网站:
http://www.shawnolson.net/a/722/mysql-arbitrary-ordering.html