ORDER BY在MySQL中有两列

时间:2013-05-07 21:10:25

标签: php mysql

我知道我可以用

订购两列
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");

我感谢任何帮助或建议!

4 个答案:

答案 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建议反对它。