Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在MySQL表中使用“";排序“;柱_Php_Mysql_Sorting_Cycle - Fatal编程技术网

Php 在MySQL表中使用“";排序“;柱

Php 在MySQL表中使用“";排序“;柱,php,mysql,sorting,cycle,Php,Mysql,Sorting,Cycle,我使用表格中的“排序”列排列相册上的照片。 这意味着相册将显示“按排序排序” 我有一个功能,允许用户在相册上排列照片,方法是在javascript中拖放照片,然后按下“保存”按钮 一个数组(带有排序后的照片ID)被发送到进程(在PHP中),然后我想对表上的行重新排序 我认为最简单的方法是: for ($c=0; $c<$length; $c++) { mysql_query('UPDATE photos SET sort="'.$c.'" WHERE id="'.$array[$c

我使用表格中的“排序”列排列相册上的照片。 这意味着相册将显示“按排序排序”

我有一个功能,允许用户在相册上排列照片,方法是在javascript中拖放照片,然后按下“保存”按钮

一个数组(带有排序后的照片ID)被发送到进程(在PHP中),然后我想对表上的行重新排序

我认为最简单的方法是:

for ($c=0; $c<$length; $c++) {
    mysql_query('UPDATE photos SET sort="'.$c.'" WHERE id="'.$array[$c].'"');
}
for($c=0;$c我的评论中有这样一个解决方案

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
在我的评论中,这是一个解决方案

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

首先,我不认为发出多个查询有什么问题。你测试过吗?你确定这会成为性能瓶颈吗?我不这么认为

但无论如何,解决方案#1将与
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)

首先,我不认为发出多个查询有什么问题。你测试过吗?你确定这会成为性能瓶颈吗?我不这么认为

但无论如何,解决方案#1将与
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)

如果使用准备好的语句,可以准备语句一次,然后运行几次,每张照片一次。这比执行那么多的
mysql\u查询
s效率更高,因为解析和查询计划只执行一次。

如果使用准备好的语句,可以准备语句一次,然后运行七次很多次,每张照片一次。这比做那么多的
mysql\u查询更有效,因为解析和查询计划只做一次。

在我看来很好。你可以尝试将它合并到一个大的更新中,并清理输入,这样你就不会容易受到sql注入的攻击。@Zombaya谢谢。正如我在问题中所说的,请忽略消毒和其他验证。但是,我如何将其合并到一个大的更新中?顺便说一句,这正是我想要的。问题在于“在哪里”子句。我错了,你不能这样做。你可以用insert语句来做,我切换了这些语句。我确实找到了一个可能对你有帮助的语句。我觉得很好。你可以尝试将它合并到一个大的更新中,并对输入进行清理,这样你就不会受到sql注入的攻击。@Zombaya谢谢。正如我在问题中所说的,请忽略清理和其他验证。但是,我如何将其合并到一个大的更新中?顺便说一句,这就是我想要的。问题在于“在哪里”子句。我错了,你不能这样做。你可以用insert语句来做,我切换了这些语句。我确实找到了一个可能对你有帮助的语句。别忘了添加WHERE on
id
,否则它会遍历表中的每一行并尝试更新它。别忘了添加WHERE on
id
,否则它会遍历每一行在表中输入ow并尝试更新它。