2011-07-05 189 views
2

我想列出了order.so我的表中定義的具有順序列項,它會保留訂單號到列表中的項目。所以,我可以使用該訂單號列出項目。如果項目數量少意味着沒有 問題,但它越來越多。我遇到麻煩了。最佳途徑爲了

項目表: -

id item varorder 
1  A1 1 
2  A2 2 
3  A3 5 
4  A4 3 
5  A5 4 
...... 
1000 A1k 1000 

使用varorder,我可以列出項目中定義的順序像波紋管

SELECT item FROM tbl_item ORDER BY varorder ASC 

查詢結果我的項目的正確順序一樣A1,A2,A4,A5,A2,...,A1K

我的問題

發生問題,而我嘗試使A1K varor DER爲1

  • 使用向上和向下箭頭 我可以交換的物品,或使用上一頁和下一頁arrows.If我要讓A1K在第一位置更改項目的順序,我應該點擊向上箭頭1000 times.This是真的很糟糕的主意管理項目。

enter image description here

  • 使用正常的更新 如果我想打A1K在第一的位置,我應該更新所有行(1000),以維持秩序correct.so我不認爲這是個好主意。

所以建議我。是否有另一個好主意,以確定的順序保持秩序?

感謝

+0

我不確定是否有更好的方法來維持秩序。根據向上箭頭將元素1K移動到位置1的點擊量:您是否認爲某種用戶可以將元素移至選定索引的下拉列表中?將節省很多點擊... –

+0

嗯!我寫了一個網站,產品訂單可以通過拖放重新排序!管理員可以通過拖放產品並將其放在正確的級別來重新排列產品!這是你的問題嗎?如果是這樣,我可以幫助你!我可以將代碼發送給你 –

+0

拖放也不錯,但是考慮列表上的1K個元素,列表的滾動工作正常,而將元素從幾乎結尾拖到列表的開始處? –

回答

1

添加列 「sortdatechanged」,使其現在插入()。然後在你點擊向上箭頭時更新它。當您點擊向下箭頭時,將varorder更新爲max(varorder)+1,並將sortdatechanged設置爲min(sortdatechanged)。然後通過sortdatechanged desc,varorder來選擇。

+0

對於較大的數據集,計算'min(sortdatechanged)'可能會很慢嗎? – aroth

+0

OP提到了1,000個項目 - 這不是非常大。 –

0

關於用戶界面:拖放=最好的方式。

關於更新: 您可以使用如下的varcode:256 512 768 1024 ...所以當你想要移動某個元素時,你需要將他的號碼更新爲(lefter + righter)/ 2。 righter = 2; (lefter + righter)/ 2 = 1.5;你必須運行一些程序,將根據當前排序更新所有元素(256 512 768 1024 ......)。

0

你可能會考慮稀疏排序,如:

id item varorder 
1  A1 10000 
2  A2 20000 
3  A3 50000 
4  A4 30000 
5  A5 40000 

然後你就可以在前面或列表中的任何其他元素之間,而不必更新表中的每一行移動元素。我建議使用varorder比以前varorder由至少10,000更大追加到列表的末尾的算法,並且通過分配插入元件的varorder即中途之間處理兩個現有元素之間的插入varorder的兩個現有元素。

因此,與上面的例子中,移動A3到第二位置,在列表中會產生:

id item varorder 
1  A1 10000 
2  A2 20000 
3  A3 15000 
4  A4 30000 
5  A5 40000 

隨着非常大號搬遷的這種做法最終會在稀疏指數運行的空間,所以你必須問自己的問題是你是否認爲在實踐中會有很多重新排序操作。

0

行更新的問題是它們是數百萬,而不是1000. 在這種情況下,您可以使varorder和orderupdated,並通過varoder ASC命令orderupdated DESC。通過這種方式,當2條記錄具有相同的順序(1)時,稍後設置爲1的記錄將是第一個,而另一個將是第二個。