7
我正在使用MySQL。我有一張表,我需要能夠手動設置排序的優先級/順序。我原本以爲給每行分配一個任意的順序(1,2,3等),然後只是將該順序與被移動的行進行「交換」,但我認爲這不是最好的方式。存儲排序順序/優先級的最佳方法是什麼?
在閱讀了這裏的相關問題(like this one)之後,很多人都說過要根據id列(id * 1000)爲優先級列賦值。要重新排列行,您可以劃分/減去列之間的差異。我不太明白這是如何工作的。
這是我需要排序的表的佈局。
CREATE TABLE liability_detail (
id int NOT NULL AUTO_INCREMENT,
analysis_id int NOT NULL, //(many-to-one relationship with analysis table)
other_columns various datatypes
sequence int DEFAULT 0
)
我想建立一個簡單的方法來管理行的優先級,所以我可以很容易,而無需編寫大量的代碼來管理一切排序。
我相信稍微詳細一點就可以回答這個問題,而不需要像交換或更新的「優先級」列這樣的技巧。你能列出優先計算公式嗎? 「移動行」的理由是什麼?我懷疑一個合適的'ORDER BY'可能會產生 – 2012-07-16 18:39:57
考慮鏈表方法。這樣可以避免在列表中向上或向下移動行時必須更新所有其他行。使用鏈接列表,您只需更新至多三行(包括您正在移動的那一行)。當然,很難對它進行查詢,所以你可能只在代碼中實現訂單。 – 2012-07-16 18:44:38
此應用程序對我們的客戶進行財務分析。我們的用戶需要能夠優先考慮一些財務狀況,方法是將其轉移到最高位置,並將較低優先級的財務狀況移至最低位置。這個過程是手動的,因爲使用ORDER BY執行自動排序的因素太多了。有時用戶需要從中間移動一行到最上面,有時候需要將第二行移到最下面。 – Jeff 2012-07-16 18:46:42