【问题标题】:How do you increment certain rows in a MySQL database with PHP?如何使用 PHP 增加 MySQL 数据库中的某些行?
【发布时间】:2011-12-10 19:39:45
【问题描述】:

我有这个 PHP:

$adj_index = $currentSignup + 1 - $r;//$r=3 and $currentSignup=24
for($i=1; $i<$referrals; $i++){
    $current_index = $currentSignup + 1 - $i;
    $q = "SELECT signup_id FROM app_sign_ups WHERE (adjusted_index='$current_index' AND app_id='$app_id')";
    $r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));

    $next_index = $current_index + 1;
    if (mysqli_num_rows($r) == 1){
        $row = mysqli_fetch_array($r, MYSQLI_ASSOC);
        $signuper = $row['signup_id'];
        $q = "UPDATE app_sign_ups SET adjusted_index='$next_index' WHERE (app_id='$app_id' AND signup_id='$signuper')";
        $r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));
    }

}

$q = "UPDATE app_sign_ups SET adjusted_index='$adj_index' WHERE app_s_id='$app_s_id'";
$r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));

它应该更新我的数据库中的行。每行都有一个值 (adjusted_index),按顺序从 1 到 25。有了它,我将数字 25 变为 22(通过从原始数字 [25] 中删除 $r)并将之前的 22-24 分别向上移动一个(因此到 23、24、25)。出于某种原因,当我运行它时,它会导致 22、24、25、22 而不是我想要的 23、24、25、22。我已经在其他几个组合上完成了它,似乎具有 adjusted_index 的行正在被最后一行替换(22 被 25 替换)。

【问题讨论】:

    标签: php mysql indexing


    【解决方案1】:

    只运行一个UPDATE 语句,一次:

    $q = " UPDATE app_sign_ups 
           SET adjusted_index = adjusted_index 
                              + CASE WHEN adjusted_index < 25
                                     THEN 1
                                     ELSE - '$r' 
                                END  
           WHERE adjusted_index >= 25 - '$r' 
             AND app_id = '$app_id'
           ORDER BY adjusted_index 
         ";
    

    或者,更好的是,使用 2 个 UPDATE 语句:

    $q1 = " UPDATE app_sign_ups 
            SET adjusted_index = adjusted_index + 1
            WHERE adjusted_index >= 25 - '$r' 
              AND app_id = '$app_id'
            ORDER BY adjusted_index DESC              --- this line is needed if
         ";                                           --- you have a UNIQUE index on
                                                      --- (app_id, adjusted_index)
    
    $q2 = " UPDATE app_sign_ups 
            SET adjusted_index = 25 - '$r'
            WHERE adjusted_index = 26 
              AND app_id = '$app_id'
         ";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多