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")
交换列名称并重试。
我有 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")
交换列名称并重试。