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

MySQL ORDER BY multiple column ASC and DESC not working as expected

我有 1 个mySQLtable。 Table 个条目是:

我想在两种情况下显示列表。首先是最高的 right_answers 也取决于最低的 time_spent

我使用这个 sql 代码来检索列表

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

我得到这个输出:

我的预期输出应该是:

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

提前致谢!

你这样试试,我正在试

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

尝试这样的事情:

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

我猜你的 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

试试这个

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

交换列名称并重试。