使用SQL 重新排序多個記錄
在此關係資料庫場景中,您有一個包含食品項目的表,其中的「位置」欄位指示其位置清單中的顯示順序(由「listID」識別)。任務是將項目(例如“Pears”)移至特定清單中的新位置(例如“Chips”之前)。使用單一 SQL 查詢實現此目的需要一種深思熟慮的方法。
一種常見的方法是使用以下查詢來擷取受影響的記錄:
<code class="sql">SELECT id, position FROM my_table WHERE listID = 1 AND position BETWEEN 1 AND 5;</code>
此查詢擷取目前位置和目標位置之間的所有記錄。
但是,有一種替代方法,可以消除多次查詢的需要。透過修改資料以在位置之間引入“間隙”,您可以簡化更新過程。
執行以下查詢:
<code class="sql">UPDATE my_table SET position = position * 10;</code>
這會將所有位置乘以10,有效地建立更大的位置
要將Pears 移到第二個位置,請執行:
<code class="sql">UPDATE my_table SET position = 15 /* New position for "Pears" */ WHERE listID = 1 AND name = 'Pears';</code>
這會將Pears 的位置調整為15,在其先前佔據的位置留下一個間隙。
為了消除多次重新排序操作後潛在的間隙,請定期執行:
<code class="sql">UPDATE my_table SET position = position * 10; /* Increase gaps */</code>
此方法提供了更有效的解決方案,可以使用單一SQL 查詢對多個記錄進行重新排序,確保項目保持所需的順序而不影響性能處罰。
以上是如何在單一 SQL 查詢中對多個記錄重新排序而不影響效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!