2017-03-17 82 views
1

大家好!我正在製作一個簡單的待辦事項應用程序。我停止了這個問題。我想讓用戶更改列表中元素的順序(將其保存到數據庫中)。保留表中的商品順序

一個第一想法是:

創建一個列(爲了),每次更改它,當用戶做一些事情。 我們有幾條記錄是好的,但更大的數字是什麼? 我的想法:

id | name | order 
1 | lorem| 1 
2 | ipsum| 2 
3 | dolor| 3 

當用戶改變「悲」到第一位置,腳本必須更新所有的記錄。 這不是我認爲的最佳解決方案。 任何人都可以分享知識如何優化? 我將不勝感激!

+1

[使用數據庫表中的排序順序列](http://stackoverflow.com/questions/8607998/using-a-sort-order-column-in-a-database-table) – SqlZim

+0

可能的重複[在數據庫表中使用排序順序列](http://stackoverflow.com/questions/8607998/using-a-sort-order-column-in-a-database-table) – philipxy

回答

0

您可以使用名爲nextprevious的列。這稱爲鏈接列表,或者如果同時使用雙重鏈接列表。請參閱:

https://en.wikipedia.org/wiki/Doubly_linked_list

移動一個記錄,在數據庫表中的一個步驟將包括兩個步驟:

  1. 從訂單中刪除記錄。
  2. 將記錄重新插入訂單。

總而言之,您總是需要對雙鏈表進行五次記錄更改,並且對於鏈表最少需要三次記錄。

+0

這不是SQL' ish解決方案。 –

0

如果要將這些數據存儲在數據庫中,那麼「排序」列是適當的。

無論何時更新或插入表格,您都需要更新此列(不需要刪除)。通常,您需要更新更改後的行的所有行。觸發器可以完成這項工作。

對於幾十甚至幾百行(取決於數據庫的強大程度),循環遍歷行可能是正確的。所以,根據列表的長度,這可能會很好。

任何增強都取決於其他因素。一些我能想到的:

  • 這些列表真的會有多大?
  • 什麼樣的轉換最重要? (交換?插入?刪除?更新?)
  • 轉換是否會批量發生?
  • 多個用戶是否會同時更改列表。