Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ORDER BY在MySQL中有两列_Php_Mysql - Fatal编程技术网

Php ORDER BY在MySQL中有两列

Php ORDER BY在MySQL中有两列,php,mysql,Php,Mysql,我知道我可以订购两列 ORDER BY col1 DESC, col2 DESC 比如说 但在我的情况下,这不起作用。我有一个MySQL查询,在这里我想按日期以及名为突出显示的列显示接下来几天的事件 因为有3种类型的事件:顶级高级(++)、高级(++)和免费(+) 现在它的顺序如下: -- 7th May 2013 +FREE EVENT ++PREMIUM +++TOP PREMIUM +++TOP PREMIUM -- -- 7th May 2013 +FREE EVENT ++PR

我知道我可以订购两列

ORDER BY col1 DESC, col2 DESC
比如说

但在我的情况下,这不起作用。我有一个MySQL查询,在这里我想按
日期
以及名为
突出显示
的列显示接下来几天的事件

因为有3种类型的事件:顶级高级(++)、高级(++)和免费(+)

现在它的顺序如下:

--

7th May 2013

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

--

7th May 2013

+FREE EVENT
++PREMIUM
+++TOP PREMIUM
+++TOP PREMIUM
所以,正如你所看到的,下一个日期即将到来,这是正确的!但我想在顶部订购顶级高级活动,然后是高级活动,至少是免费活动

我当前非工作查询的结尾是:

ORDER BY e.`date` ASC, e.`highlight` ASC");
我感谢任何帮助或建议

ORDER BY e.date ASC, e.highlight DESC

ORDER BY e.date ASC, e.highlight DESC

按e.date DESC排序,e.突出显示ASC

按e.date DESC排序,e.突出显示ASC

交换两列-第一列按
突出显示,然后按日期。您将获得如下序列:

Top premium: 7th may
Top premium: 8th may
Premium: 7th may
Premium: 8th may
Free: 7th may
...

交换两列-首先按
顺序突出显示
,然后按日期。您将获得如下序列:

Top premium: 7th may
Top premium: 8th may
Premium: 7th may
Premium: 8th may
Free: 7th may
...

枚举在内部表示为数字,顺序与它们在声明中列出的顺序相同。如果将列声明为
ENUM('2','1','0')
'2'
存储为
1
'1'
存储为
2
'0'
存储为
3

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

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

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

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

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

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


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

可能是按字母顺序排列的。。即使您试图按日期订购。。示例:4月1日将在1月1日之前,因为“A”排在“J”之前@Reikyushin他说日期顺序是正确的。@Barmar考虑到他使用日期描述和按ASC顺序获取,这很奇怪。
突出显示列的数据类型是什么?是ENUM吗?@OP-您可能想澄清一下您的问题。你的意思是按日期分组:
5月7日-顶级、高级、免费;5月8日-最高、最高、自由
或按事件类型:
7可能最高、8可能最高、7可能最高、8可能最高、8可能最高、7可能自由
?你的订单是按日期排序的,可能是按字母顺序排序的。。即使您试图按日期订购。。示例:4月1日将在1月1日之前,因为“A”排在“J”之前@Reikyushin他说日期顺序是正确的。@Barmar考虑到他使用日期描述和按ASC顺序获取,这很奇怪。
突出显示列的数据类型是什么?是ENUM吗?@OP-您可能想澄清一下您的问题。你的意思是按日期分组:
5月7日-顶级、高级、免费;5月8日-最高、最高、自由
或按事件类型:
7可能最高、8可能最高、7可能最高、8可能最高、8可能最高、7可能自由
?你的订单是按日期排序的。有趣的是,它们恰好是按字母顺序排列的。@Maple:的确如此。我的回答只是基于OP告诉我们真相的假设:——)@Vay:“不起作用”不是一个有用的解释。如果你在问题中所解释的是正确的,它应该是有效的。如果它给出了一个意想不到的结果-你在最初的问题解释中犯了一个错误。因为这对我来说似乎很明显,我已经尝试过这个解决方案。我尝试了许多ASC和DESC组合使用这两个列。可能是因为
highlight
是ENUM('2','1','0')?@Vay:如果语句“如您所见,它在下一个日期前订购,这是正确的!但我想在顶部订购顶级高级事件,然后是高级事件,至少是免费事件。”是正确的-那么它应该可以工作。如果没有-您向我们提供了错误的问题解释。“可能是因为”--我今天猜得不够好,请更改问题,以便它提供有关模式和数据的详细信息。并按原样提供它们,不要进行任何简化,因为它们恰好是按字母顺序排列的。@Maple:的确如此。我的回答只是基于OP告诉我们真相的假设:——)@Vay:“不起作用”不是一个有用的解释。如果你在问题中所解释的是正确的,它应该是有效的。如果它给出了一个意想不到的结果-你在最初的问题解释中犯了一个错误。因为这对我来说似乎很明显,我已经尝试过这个解决方案。我尝试了许多ASC和DESC组合使用这两个列。可能是因为
highlight
是ENUM('2','1','0')?@Vay:如果语句“如您所见,它在下一个日期前订购,这是正确的!但我想在顶部订购顶级高级事件,然后是高级事件,至少是免费事件。”是正确的-那么它应该可以工作。如果没有-您向我们提供了错误的问题解释。“可能是因为”--我今天猜得不够好,请更改问题,以便它提供有关模式和数据的详细信息。并按原样提供它们,没有任何简化,等等,可能是因为
highlight
是ENUM('2','1','0')?可能是因为
highlight
是ENUM('2','1','0'))