0

我知道我可以订购两列

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");

我感谢任何帮助或建议!

4

4 回答 4

3

嗯,

ORDER BY e.date ASC, e.highlight DESC

?

于 2013-05-07T21:12:44.200 回答
1

ENUM 在内部表示为数字,按照它们在声明中列出的顺序。如果将列声明为ENUM('2', '1', '0')'2'则存储为1'1'as2'0'as 3

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

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

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

于 2013-05-08T15:35:29.703 回答
1

ORDER BY e.date DESC, e.highlight ASC

于 2013-05-07T21:15:13.743 回答
1

交换两列 - 首先highlight按日期排序。你会得到如下序列:

Top premium: 7th may
Top premium: 8th may
Premium: 7th may
Premium: 8th may
Free: 7th may
...
于 2013-05-07T21:15:52.330 回答