2012-07-16 33 views
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 
) 

我想建立一個簡單的方法來管理行的優先級,所以我可以很容易,而無需編寫大量的代碼來管理一切排序。

+0

我相信稍微詳細一點就可以回答這個問題,而不需要像交換或更新的「優先級」列這樣的技巧。你能列出優先計算公式嗎? 「移動行」的理由是什麼?我懷疑一個合適的'ORDER BY'可能會產生 – 2012-07-16 18:39:57

+0

考慮鏈表方法。這樣可以避免在列表中向上或向下移動行時必須更新所有其他行。使用鏈接列表,您只需更新至多三行(包括您正在移動的那一行)。當然,很難對它進行查詢,所以你可能只在代碼中實現訂單。 – 2012-07-16 18:44:38

+0

此應用程序對我們的客戶進行財務分析。我們的用戶需要能夠優先考慮一些財務狀況,方法是將其轉移到最高位置,並將較低優先級的財務狀況移至最低位置。這個過程是手動的,因爲使用ORDER BY執行自動排序的因素太多了。有時用戶需要從中間移動一行到最上面,有時候需要將第二行移到最下面。 – Jeff 2012-07-16 18:46:42

回答

3

我結束了以下這個問題的建議:https://stackoverflow.com/a/6804302/731052

我設置的排序順序列= ID * 1000個這樣我就可以得到獨特的訂單。到目前爲止,這工作得很好,並沒有任何問題。

相關問題