Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过帮助订购MySQL!_Sql_Mysql_Sql Order By - Fatal编程技术网

通过帮助订购MySQL!

通过帮助订购MySQL!,sql,mysql,sql-order-by,Sql,Mysql,Sql Order By,我想按一定的顺序做一个订单。我知道我可以修改整个数据库,但是我需要修改整个代码库 我所拥有的是“游戏”表中的一列,名为“状态” 所以 我正在寻找的是能够订购它的1,然后0,然后2 有什么想法吗?您可以使用FIELD() 但最好再解释一下您想做什么,即您的表包含什么。如果我理解正确,请使用: 使用: 使用: 我打算发布与OMG小马相同的方法,所以这里有+1。以下是我学习这项技术的有用网站: 另一个选项是为状态列创建一个验证表,称为VAL_GAME_status。GAMES.STATUS将是VAL_

我想按一定的顺序做一个订单。我知道我可以修改整个数据库,但是我需要修改整个代码库

我所拥有的是“游戏”表中的一列,名为“状态”

所以

我正在寻找的是能够订购它的1,然后0,然后2

有什么想法吗?

您可以使用FIELD()


但最好再解释一下您想做什么,即您的表包含什么。

如果我理解正确,请使用:

使用:

使用:


我打算发布与OMG小马相同的方法,所以这里有+1。以下是我学习这项技术的有用网站:


另一个选项是为状态列创建一个验证表,称为VAL_GAME_status。GAMES.STATUS将是VAL_GAME_STATUS的外键,而VAL_GAME_STATUS可能看起来像

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);
鉴于此,从游戏中获取排序结果的查询变为

SELECT g.*
  FROM GAMES g
INNER JOIN VAL_GAME_STATUS s
  USING (STATUS)
ORDER BY s.SORT_ORDER;
这里的缺点是,您需要执行一个连接来对数据进行排序,但这只是一个小问题,因为VAL_GAME_STATUS是一个很小的表,它可能保存在内存中。优点是,您可以在不接触代码的情况下动态更改排序顺序。使用适当的排序顺序添加新的状态值也很容易


分享和享受。

这本应该是正确的答案,但OP要求订购1,0,2@ajacian81当前位置前面的评论自相矛盾,但我认为示例的一致性足以说明如何根据需要进行更改。
  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)
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);
SELECT g.*
  FROM GAMES g
INNER JOIN VAL_GAME_STATUS s
  USING (STATUS)
ORDER BY s.SORT_ORDER;