2012-08-31 65 views
3

我從Sqlite數據庫中的項目表中檢索項目的有序列表。我如何交換ID,以便在Sqlite數據庫表中的兩個項目的順序?交換SQLite數據庫中的項目順序

+0

那你最終會一起去?一系列或多個鏈接是否適合您? – bryanmac

回答

6

該id不應該確定位置或排序。它應該是一個不可變的標識符。

如果您需要在數據庫中表示順序,則需要創建另一個orderNumber列。一些選項是(1)要麼具有跨越一個範圍的值,要麼(2)具有指向下一個的指針(如鏈接列表)。

對於範圍:跨越一個範圍有助於避免在插入點之後重寫所有項目的orderNumber列。例如,在該範圍內,插入第一個獲取1,插入第二個獲取最大範圍,在第一個和第二個之間插入第三個獲取中間數字 - 如果您重新定位,則必須分配它之間的項目的中點。一個缺點是,如果列表得到足夠的流失(儘量減少大範圍),您可能需要重新平衡範圍。這個解決方案的專業人員可以通過在sql語句中按列排序來獲得有序列表。

對於鏈表:如果數據庫有一個下一列指向後面的id,那麼需要更新一些行來插入一些內容。上行是很簡單的。缺點是你不能在sql語句中訂購 - 你依靠獲取列表進行分類的代碼。

另一個變化是您可以將有序列表數據從該表中抽出。例如,您可以有一個有listid,itemid,orderedNumber的有序列表。這允許您在其引用的表中具有一個或多個邏輯有序的項目列表。

其他一些參考:

How to store ordered items which often change position in DB

Best way to save a ordered List to the Database while keeping the ordering

https://dba.stackexchange.com/questions/5683/how-to-design-a-database-for-storing-a-sorted-list

相關問題