2011-12-10 10 views
1

私はこのPHPを持っている:MySQLデータベースの特定の行を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)); 

私のデータベース内の行を更新することになっています。各行は1から25までの値(adjusted_index)を順番に持っています。私はそれを使って番号25を取って22にします(元の番号[012]から$rを取り除く)し、前の22-24をそれぞれ1つ上に移動します(23,24,25まで)。私はそれを実行する何らかの理由で、私はそれが欲しいのような23,24,25,22の代わりに22,24,25,22の結果です。私はカップルの他の組み合わせでそれをやっていると、それはadjusted_index最後の行(22は25に置き換えられている)に置き換えられている行があるようです。一度

答えて

1

ランのみ1 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' 
    "; 
:2つの 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 
    "; 

または、

関連する問題