簡體   English   中英

SQL | 使用一個查詢更新多行

[英]SQL | Update multiple rows with one query

我有一個方法,必須改變大約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秒鍾。 我的問題:有沒有辦法只用一個查詢編輯多行?

當然,發送一個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完成。

如果范圍很短,那么我們可以使用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
$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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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