我知道我可以用
订购两列ORDER BY col1 DESC, col2 DESC
例如。
但在我的情况下,这不起作用。我有一个MySQL-Query,我希望显示date
订购的下一天的事件,但也可以显示名为highlight
的列。
因为有三种类型的事件: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");
我感谢任何帮助或建议!
答案 0 :(得分:3)
嗯,
ORDER BY e.date ASC, e.highlight DESC
答案 1 :(得分:1)
ORDER BY e.date DESC,e.highlight ASC
答案 2 :(得分:1)
交换两列 - 按highlight
排序,然后按日期排序。您将获得如下序列:
Top premium: 7th may
Top premium: 8th may
Premium: 7th may
Premium: 8th may
Free: 7th may
...
答案 3 :(得分:1)
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建议反对它。