我有一个方法,必须更改大约20行。我通过ajax传递一个像“14-33-61-10 ...”的字符串来保存一些行的顺序。 这是我的实际(工作)代码:
$explode = explode('--',$_POST['data']); // -> array('0'=>'8', '1'=>'4', '2'=> ... )
$i = 1;
foreach( $explode as $task ) {
if( !is_int($task) ) continue;
$exec = $project->exec("UPDATE tasks SET pos=$i WHERE rowid=". $task );
$i++;
}
我的问题是,它需要大约1秒钟。 我的问题:有没有办法只用一个查询编辑多行?
答案 0 :(得分:3)
当然,发送一个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中完成。
答案 1 :(得分:0)
如果范围很短,那么我们可以使用ID IN(ids)参数。
UPDATE `profile` SET `app_status`=3 WHERE `id` IN (3,37,95,136,1087,1795,1817)
如果它很长并且我们知道该范围,那么让我们使用BETWEEN值和值参数。
UPDATE `profile` SET `app_status`=3 WHERE `id` BETWEEN 3904 AND 3918
答案 2 :(得分:-1)
$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);