2012-07-17 25 views
0

我的幻燈片項目數據庫中有一個int(11)DisplayOrder列,它告訴我的代碼顯示項目的順序。管理員可以使用a窗體,例如將數字20更改爲數字3.不強制用戶手動查找數字3並將其與數字20交換,是否有更新數據庫中數字序列的簡單方法?在發送查詢之前使用MySQL或更改array()中的項目。使用PHP和MySQL更新數字序列(顯示順序)

我已經搜索和搜索,並且似乎沒有很多可靠的答案。問題是我目前有400行,這個數字會增長。每次訂單更改時,我都不希望每次更新400次。 有沒有更好的方法?是否存在腳本?

+0

編寫自己很容易,但是您想在插入後交換或插入並增加所有內容嗎?您還可以查看像jQuery那樣的客戶端解決方案,並在提交時重建整個列表。 – jeroen 2012-07-17 00:19:24

+0

@jeroen在插入後插入並增加所有內容。例如,如果某人向幻燈片添加了新項目,它將默認轉到數字1的位置。我將不得不增加每一行。或者將一個項目插入數字2,它將不得不增加第2行之後的所有數據。 – 2012-07-17 00:23:17

+0

如果您想要增加新插入後的所有數字,恐怕唯一的辦法就是更新後面的所有記錄。 – jeroen 2012-07-17 00:30:47

回答

2

爲什麼您需要完全重新排序DisplayOrder值?

如果存在重複值,則ORDER BY子句也可以正常工作。要保持穩定的排序,您可以通過輔助列進行排序,例如項目名稱或ID。

+0

對於大多數情況,對'DisplayOrder'值重複'ORDER BY',然後對自動增量列('ID')進行輔助排序可以工作(假設爲DESC)。但是,如果一個較低的'ID'具有重複的'DisplayOrder'值作爲一個更高的'ID',但管理員實際上希望將較低的ID顯示爲較高的顯示順序?這可能很少見,但就我所見,這種解決方案並不允許這樣做。 – 2012-07-17 00:28:56

+0

使用你的解決方案,因爲它似乎是資源密集度最低的,下面是我要做的:添加一個DisplayOrderSecondary字段,它將在INSERT時設置爲1,然後運行一個查詢來設置所有其他行DisplayOrderSecondary = 0具有相同的'DisplayOrder'編號。然後,當從數據庫中拉出項目時,「ORDER BY DisplayOrder ASC,DisplayOrderSecondary DESC」,因此總是顯示最新的副本。謝謝! – 2012-07-17 00:35:14