[英]Alternative to bubble sort in MySQL
問題實際上很可能出在這里,我不是在問google(或stackoverflow)正確的問題,但是由於這個簡單的事情使我發瘋。 很抱歉發布了很長時間,但是想弄清楚情況。
我有一個記錄ID,person_name,優先級的mysql表
ID和person_name的含義不言而喻,優先級用於對記錄降序排序-最高=最高優先級。
我有以下記錄,為簡單起見,ID對應於排序順序:
1, "John A", 3
2, "John B", 2
3, "John C", 1
4, "John D", 0
在我從其他計算機的導出中導入記錄之前,這一直很好,突然之間有兩個優先級相同的記錄。
1, "John A", 3
2, "John B", 2
3, "John C", 1
5, "John E", 1
4, "John D", 0
現在按優先級DESC,名稱ASC,ID3和ID5對記錄進行排序時,將按字母順序排序,這與情況不符。 如果用戶希望將ID5的優先級更改為高於ID2,我不能僅僅增加優先級,因為它會匹配ID2,並且由於字母順序,ID5會顯示在ID2以下。
問題:是否有比這更有效的方法,或者是完全不同的方法:
如果有多個帶有NEAREST_PRIORITY的記錄,這實際上將不能很好地工作...
感謝您閱讀冗長的帖子和任何想法。
有趣的問題,這取決於您如何解決導入記錄的優先級沖突。 我們假設,如果發生沖突,則導入的記錄將具有優先權。 導入之前,將所有優先級乘以2,然后導入新記錄,但將其優先級乘以2,並在導入期間加1。 現在您將擁有:
1, "John A", 6
2, "John B", 4
5, "John E", 3
3, "John C", 2
4, "John D", 0
如果您需要保持優先級連續,或者需要執行很多導入操作,則必須做一些工作來重置數字,但是至少順序是正確的。
您可以對發生沖突的優先級更改使用相同的解決方案,將其乘以2,然后將新優先級設置為新優先級+1。因此,將ID4移至ID5之前,其新優先級將為(3 * 2)+ 1和您將擁有:
1, "John A", 12
2, "John B", 8
4, "John D", 7
5, "John E", 6
3, "John C", 4
同樣,如果您這樣做,事情將會迅速升級,因此您可能想要重置數字。 此答案顯示了您可以調整的順序編號示例。
我在考慮鏈接列表並實現優先級表,例如
{ id, userId, comesAfterUserId, comesBeforeUserId }
然后,任何優先級移動都只能更改兩個條目。 但是我不知道如何直接在SQL中對它進行排序,因此您必須在應用程序中進行處理。 我覺得這是一個更優雅的解決方案,但乘以2的倍數也應該有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.