我在mysql中面臨排序問題
請參閱以下查詢的輸出:
select astrologers.id,astrologers.name,chat_online,online,experience from `astrologers`
where `astrologers`.`status` = '1'
order by experience asc limit 10;
| ID | 姓名 | 線上聊天 | 在線的 | 經驗 |
|---|---|---|---|---|
| 15 | 天文阿努普 | 0 | 0 | 3 |
| 20 | 測驗 Astro2 | 0 | 0 | 3 |
| 3 | 測驗 anoop | 0 | 0 | 5 |
| 4 | 阿努普·庫馬爾·特里維迪 | 0 | 0 | 5 |
| 7 | 測驗 | 0 | 0 | 5 |
| 58 | 尼拉吉亞達夫 | 1 | 0 | 5 |
| 45 | 薩蒂什·庫馬爾·古普塔 | 1 | 1 | 10 |
| 56 | 美聯社夏爾馬 | 1 | 0 | 15 |
| 40 | VG占星家應用程式 | 1 | 0 | 55 |
在上面的結果中,id 58(Neeraj yadav)位于第 6 位,但是當我使用 運行相同的查詢時limit 3,相同的 id 58(Neeraj yadav)位于第 3 位:
select astrologers.id,astrologers.name,chat_online,online,experience
from `astrologers`
where `astrologers`.`status` = '1'
order by experience asc limit 3;
| ID | 姓名 | 線上聊天 | 在線的 | 經驗 |
|---|---|---|---|---|
| 20 | 測驗 Astro2 | 0 | 0 | 3 |
| 15 | 天文阿努普 | 0 | 0 | 3 |
| 58 | 尼拉吉亞達夫 | 1 | 0 | 5 |
上面結果中的第三行應該是 id 3(測驗 anoop),但它給出了 id 58(Neeraj yadav)
這是mysql中的錯誤嗎?
uj5u.com熱心網友回復:
這是 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/526538.html
