簡體   English   中英

使用“排序”列在MySQL表中排列行

[英]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是將REPLACEVALUES子句結合使用。 但是,在這種情況下,您需要為表的所有列顯式指定數據,否則這些列中的數據將被擦除(設置為默認值)。

解決方案#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM