Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.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 SQL |使用一个查询更新多行_Php_Sql_Sqlite_Sql Update - Fatal编程技术网

Php SQL |使用一个查询更新多行

Php SQL |使用一个查询更新多行,php,sql,sqlite,sql-update,Php,Sql,Sqlite,Sql Update,我有一个方法,其中大约20行必须更改。我给每个ajax传递一个字符串,如“14-33-61-10…”,用于保存某些行的顺序。 以下是我的实际(工作)代码: 我的问题是,大约需要1秒。 我的问题:有没有一种方法可以通过一个查询编辑多行?当然,发送一个SQL字符串,如: update tasks set pos = case rowid when 13 then 1 when 33 then 2 when 61 then 3

我有一个方法,其中大约20行必须更改。我给每个ajax传递一个字符串,如“14-33-61-10…”,用于保存某些行的顺序。 以下是我的实际(工作)代码:

我的问题是,大约需要1秒。
我的问题:有没有一种方法可以通过一个查询编辑多行?

当然,发送一个SQL字符串,如:

update  tasks 
set     pos =
        case rowid
        when 13 then 1
        when 33 then 2
        when 61 then 3
        when 10 then 4
        end
where   rowid in (13,33,61,10)

13-33-61-10
(13,33,61,10)
的转换最好在PHP中完成。

如果范围较短,那么我们可以在(ids)参数中使用ID

$explode = explode('--',$_POST['data']); // -> array('0'=>'8', '1'=>'4', ... )
$i = 1;
$sql = "";
foreach($explode as $task)
{
    if(!is_int($task)) continue;
    $sql .= "UPDATE tasks SET pos=$i WHERE rowid=$task;";
    $i++;
}
$project->exec($sql);
UPDATE `profile` SET `app_status`=3  WHERE `id` IN (3,37,95,136,1087,1795,1817)
如果它很长并且我们知道这个范围,让我们使用BETWEEN-value-and-value参数

UPDATE `profile` SET `app_status`=3  WHERE `id` BETWEEN 3904 AND 3918

查看此
http://stackoverflow.com/questions/9346755/update-multiple-rows-in-1-column-in-mysql
@mr_应用程序基于代码“set_pos=$i”已经是增量的。。尝试将update语句放在“i++”之后,好的一点是,SQL代码段已更新。您还可以一次性发送多个update语句
update。。。;更新。。。;更新谢谢。我尝试了“更新…”,更新…”和您的解决方案。你的一个要快3倍。太棒了,我从来不知道你可以在一个语句中完成更新。很不错的。
UPDATE `profile` SET `app_status`=3  WHERE `id` BETWEEN 3904 AND 3918