[英]Arrange Rows in a MySQL table using a “sort” column
我使用表格中的“排序”列在相冊上排列照片。 這意味着將以“ORDER BY sort”顯示相冊。
我有一個功能,允許用戶在相冊中排列照片,通過拖放照片,在JavaScript中,然后按“保存”按鈕。
一個數組(帶有排序的照片ID)被發送到進程(在PHP中),然后我想重新排序表上的行。
我心目中最簡單的方法是:
for ($c=0; $c<$length; $c++) {
mysql_query('UPDATE photos SET sort="'.$c.'" WHERE id="'.$array[$c].'"');
}
(請忽略此處的清理,重復和其他驗證)
但是我擔心在這樣的循環中進行的查詢量很大。
你會如何改進這種方法?
謝謝。
首先,我認為發布多個查詢沒有任何問題。 你測試過嗎? 你確定它會成為性能瓶頸嗎? 我不這么認為。
但無論如何, 解決方案#1是將REPLACE與VALUES
子句結合使用。 但是,在這種情況下,您需要為表的所有列顯式指定數據,否則這些列中的數據將被擦除(設置為默認值)。
解決方案#2只是為了好玩。 我認為沒有人會使用它,但仍然:
UPDATE photos
SET sort = (
SELECT sort FROM (
SELECT 1 id, 1 sort UNION
SELECT 2 id, 2 sort UNION
SELECT 123 id, 3 sort) t
WHERE t.id = photos.id)
WHERE id IN (1, 2, 123)
解決方案#3與Zombaya的解決方案幾乎相同:
UPDATE photos
SET sort =
IF(id = 1, 1,
IF(id = 2, 2,
IF(id = 123, 3,
0)))
WHERE id IN (1, 2, 123)
我評論中的博客將此作為解決方案
UPDATE `table_name` SET `field_name` = CASE `id`
WHEN '1' THEN 'value_1'
WHEN '2' THEN 'value_2'
WHEN '3' THEN 'value_3'
ELSE `field_name`
END
如果您使用預准備語句,則可以准備一次語句,然后多次運行一次,每張照片一次。 這比執行許多mysql_query
更有效,因為解析和查詢計划只執行一次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.