我在mysql 中面临排序问题
请参阅以下查询的输出:
select astrologers.id,astrologers.name,chat_online,online,experience from `astrologers`
where `astrologers`.`status` = '1'
order by experience asc limit 10;
id | name | chat_online在线 | >体验|||
---|---|---|---|---|---|
15 | Astro Anoop | 0 | 0 | 3 | |
20 | 测试Astro2 | 0 | 0 | 3 | |
3 | 测试anoop | 0 | 0 | 5 | |
Anoop Kumar trivedi | 0 | 0 | 5 | ||
7 | 测试 | 00 | 5 | ||
58 | Neeraj yadav | <1>05 | |||
萨蒂什·库马尔·古普塔 | |||||
56 | AP Sharma | 1 | 0 | 15 | |
40 | VG Astrologer应用程序 | 1 | 0 | 55 |
这是MySQL中的错误吗?
否。问题是你的排序是不确定的,并且在第三个位置给出了平局:
| 3 | Test anoop | 0 | 0 | 5 |
| 4 | Anoop Kumar trivedi | 0 | 0 | 5 |
| 7 | Test | 0 | 0 | 5 |
| 58 | Neeraj yadav | 1 | 0 | 5 |
所有4个用户都有相同的体验,因此让数据库来决定如何对它们进行排序。
当被要求返回到前3行时,数据库会选择前两行,然后从4个平局中选择一行。正如您开始看到的那样,在同一查询的后续执行中,您得到的结果可能不一致。
底线:了解你的数据;如果你想要一个确定性的结果,那么就使用确定性排序。例如,我们可以使用id
来打破联系,从而使结果是可预测的:
order by experience, id limit 3