我有1个mySQL表。表条目是:
我想在2个条件下显示列表。首先是最高 right_answers ,还取决于最低 time_spent
我用这个sql代码检索列表
mysql_query("SELECT * FROM `table_name` WHERE `contest_id` = '2' ORDER BY right_answers desc,time_spent")
我收到了这个输出:
我的预期产出应该是:
我尝试了多次不同的查询,但结果仍然是错误的。你能给我一些解决方案吗?
提前致谢!
答案 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")
交换列名,然后重试。