Mysql 按特定顺序排列数据

Mysql 按特定顺序排列数据,mysql,sql,Mysql,Sql,我有一个包含8条记录的用户表。我希望根据字段id(该表的主键)按降序排列数据,但id 3和5除外。所以最终结果应该是这样的 id name -- ---- 3 peter 5 david 8 john 7 stella 6 jim 4 jack 2 nancy 1 scott 除id 3和5外,其余数据应按降序排列,3和5应按升序排列。类似于以下内容: order by case when id = 3 then 999 whe

我有一个包含8条记录的用户表。我希望根据字段id(该表的主键)按降序排列数据,但id 3和5除外。所以最终结果应该是这样的

id  name
--  ----
3   peter
5   david
8   john
7   stella
6   jim
4   jack
2   nancy
1   scott
除id 3和5外,其余数据应按降序排列,3和5应按升序排列。

类似于以下内容:

order by 
   case 
     when id = 3 then 999
     when id = 5 then 998
     else id
   end desc

这假设您实际上没有超过8行。否则,您必须更改将3和5移到顶部的“神奇”数字。

我认为这里的诀窍是使用枚举

SELECT id, name FROM my_table WHERE id IN (3, 5) ORDER BY ASC
UNION
SELECT id, name FROM my_table WHERE id NOT IN(3, 5) ORDER BY DESC

在MySQL中,有一个名为
FIELD
的函数,如果在列表中找不到值,该函数*将返回零

SELECT *
FROM   tableName
ORDER BY FIELD(id, 5, 3) DESC, id DESC

嗯。。因此,如果该用户超过,那么在这种情况下,您的查询将无法工作?@sureyn:您可以简单地将
999
增加到一个非常大的值。有没有其他方法不使用UNION?按照SQL标准,您无法订购UNION的一部分。MySQL允许这样做吗?即使MySQL试图删除这两个部分之间的重复项,顺序是否仍然保留?我的错。我想我对这个标准做了一些假设。@a_horse_和_no_name:从用户那里执行查询SELECT IF(id=3或id=5,id,~id),你会得到答案,它给出了奇怪的数字。它们是什么?它们是临时自动生成的数字,而不考虑表中记录的数量。这非常类似于此
SELECT*FROM table1 ORDER BY IF(id=3或id=5,id,id-8)desc
,但这里需要定义最大id;);这是正确的。但是我们不想为问题的max id.:)+1操心:但是返回id的值是3,5,1,2,4,6等等。。。其中as输出应该是3,5,8,7,6,4。。。。
SELECT *
FROM   tableName
ORDER BY FIELD(id, 5, 3) DESC, id DESC