MySQL ORDER BY多列ASC和DESC无法按预期工作

时间:2016-06-24 10:39:28

标签: php mysql sql-order-by

我有1个mySQL表。表条目是:

enter image description here

我想在2个条件下显示列表。首先是最高 right_answers ,还取决于最低 time_spent

我用这个sql代码检索列表

mysql_query("SELECT * FROM `table_name` WHERE `contest_id` = '2' ORDER BY right_answers desc,time_spent")

我收到了这个输出:

enter image description here

我的预期产出应该是:

enter image description here

我尝试了多次不同的查询,但结果仍然是错误的。你能给我一些解决方案吗?

提前致谢!

4 个答案:

答案 0 :(得分:2)

我猜您的time_spent列的数据类型为VARCHAR(x),而不是数字数据类型。因此,MySQL按字母顺序对这些值进行排序。

 1
 10
 259
 46
 5
 6
 7894
 9

您对此问题的最佳修复方法是将该列的数据类型更改为INT。 (还要修复right_answers列。)

ALTER TABLE table_name CHANGE COLUMN time_spent time_spent INT NOT NULL DEFAULT '0'
ALTER TABLE table_name CHANGE COLUMN right_answers right_answers INT NOT NULL DEFAULT '0'

然后,您的ORDER BY操作将以数字方式运行并为您提供预期结果。

您的第二个最佳修复方法是将数据强制转换为ORDER BY子句中的数字,如下所示:

 ORDER BY 0+right_answers DESC, 0+time_spent ASC

答案 1 :(得分:0)

你试试这种方式,我正在尝试它的工作

mysql_query(" SELECT * FROM table_name WHERE contest_id =' 2' ORDER BY table_name.right_answers desc,time_spent ASC");

答案 2 :(得分:0)

尝试这样的事情:

SELECT *
FROM `table_name` WHERE `contest_id` = '2' 
ORDER BY SUBSTRING( time_spent
FROM 1 
FOR 1 ) ASC , right_answers DESC

答案 3 :(得分:0)

试试这个

mysql_query(" SELECT * FROM table_name WHERE contest_id =' 2'和id in(SELECT ID FROM table_name ORDER BY right_answers DESC)ORDER BY time_spent ASC")

交换列名,然后重试。