我知道我可以订购两列

ORDER BY col1 DESC, col2 DESC


例如。

但是对于我来说,这是行不通的。我有一个MySQL查询,我想在其中显示date排序的接下来几天的事件,但也要通过名为highlight的列显示。

因为存在3种类型的事件:TOP-Premium(+++),Premium(++)和Free(+)。

现在它的命令是这样的:

-

7th May 2013

+FREE EVENT
++PREMIUM
+++TOP PREMIUM
+++TOP PREMIUM


-

8th May 2013
(same here as on 7th May 2013)


-

因此,正如您所看到的,它要在下一个日期之前下订单,这是正确的!但是我想在顶部订购TOP-Premium-Events,然后是Premium-Events,至少是免费事件。

我当前无法正常工作的查询的结尾是:

ORDER BY e.`date` ASC, e.`highlight` ASC");


感谢您的帮助或建议!

最佳答案

ENUM在内部以数字表示,其顺序在声明中列出。如果将列声明为ENUM('2', '1', '0'),则'2'存储为1'1'存储为2,而'0'存储为3

ORDER BY使用这些内部编号,而不是标签。如果要按标签而不是内部编号订购,则必须使用CAST(),例如

ORDER BY e.`date` ASC, CAST(e.highlight AS CHAR) ASC


这就是为什么将数字用作ENUM的标签通常不是一个好主意的原因之一。 MySQL documentation建议不要这样做。

关于php - 在MySQL中有两列的ORDER BY,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16428598/

10-13 00:41