2016-04-30 27 views
3

我正在開發一個Web應用程序,它將圖像顯示在滑塊中。重要的是我可以修改它們顯示的順序。在數據庫中存儲帖子顯示順序

目前,我在名爲'order'的圖像表中有一列,必須設置該列以確保排序正確工作,但更改它也需要改變每一個,這在處理數百條記錄時變得棘手。

該表格以及修改它的查詢都在開發中,所以改變這種方式完全沒問題。

我的問題是:

  • 當我插入新行,我怎麼能保證它出現在列表的末尾?如果從表中刪除條目,SQL中的自動遞增會導致間隙。如何確保該行被分配的訂單1大於表中的最高訂單?

  • 如何重新排列表格?想象一下,我使用一個拖放界面(或類似的)重新排列一個圖像,將其帶到頂部或列表的不同部分。如果我這樣做,我需要重置每個項目的編號,這在處理數百行時再次效率低下。

  • 如何防止兩行在任何給定時間具有相同的順序?列上的UNIQUE標誌?據推測,如果我設置了該標誌,則從一行中的8開始改變順序可以使用該號碼。對?

謝謝你的時間,我希望這不是太模糊的問題,很容易回答!

+0

你爲什麼需要連續的id值?序列中的差距應該沒有關係....在表中添加一個「sortOrder」列,如果您需要在Laravel中訂購 –

回答

1
  1. 它將在列表的末尾。只需使用auto increment功能並且不要手動設置ID(如lastID + 1),並且您永遠不會描述問題。

  2. 您可以允許用戶更改列表的順序,然後只更新所有order單元(對於列表中的每個成員)。或者,您可以使用Ajax,並在每次用戶拖放時爲兩個成員交換order值。

  3. 使用2中描述的方法之一,你永遠不會有這個問題。

3
  1. 查詢表中您要插入到查找表中的MAX ID。然後在你的插入只是做這個+1。

  2. 當重新排序,說你要設置圖像爲了6訂購3.你會想從3階更新所有行起訂購+ 1,然後設置圖像訂購3

UPDATE table SET id = id+1 WHERE id IN (SELECT * FROM table where id >= 3)

  • 如果使用獨特的順序列重新排序則必須更新當前值到一個臨時值,如99999,則在使用方法2.然而,方法2應該保持該表不接收任何重複的值。
  • 阿里納斯

    你可以在刪除照片的重新評估IDS保持無間隙

    UPDATE table SET id = id-1 WHERE id IN (SELECT * from TABLE WHERE id > 3)

    這裏的3是刪除ID

    +0

    'mysqli'的特定序列,您可以對其進行排序?真的嗎?此外,這種方法會導致高負載項目的數據損壞,這是一個不好的做法。 –

    +0

    @AlexeyMezenin會造成什麼樣的傷害?以 – Forest

    +0

    作爲示例將其刪除。 – Matt

    相關問題