2017-01-07 16 views
1

Masterというテーブルが1つあり、idAB、およびCという4つの列があります。phpを使用して更新クエリ内の複数の列で特定の単一の列を更新するにはどうすればよいですか?

テーブルを更新するときに、ユーザーが選択した特定の単一の列を変更する必要があります。たとえば、ユーザーが列Aを選択した場合、Aレコードのみがデータベースで更新されます。ユーザーがCを選択すると、Cレコードのみが更新されます。

以下は試したコードですが、すべての列を更新しています。これで私を助けてくれますか?

$column_name=$row['column_name'];//A,B,C 
if (isset($result->num_rows) > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     $A=$row['A']; 
     $B=$row['B']; 
     $C=$row['C']; 
     }} 

UPDATE Master SET $column_name='$A'+20, $column_name='$B'+30, $column_name='$C'+50 WHERE user_id='$id'"; 
+0

あなたはどのデータベースシステムを使用していますか? 'MySQL'または' MS SQL server'?質問に_both_タグを付けましたが、意味がありません。 – arkascha

+0

申し訳ありませんが、私はMySQLを使用しています。 –

+0

1つの列のみを更新する場合、なぜ3つの変数がありますか? – Strawberry

答えて

-1

あなたはif文を使用することができます

$column_name=$row['column_name'];//A,B,C 
if (isset($result->num_rows) > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     $A=$row['A']; 
     $B=$row['B']; 
     $C=$row['C']; 
     }} 

    if($column_name == 'A'){ 
     UPDATE Master SET A='$A'+20 WHERE user_id='$id'"; 
    } elseif($column_name == 'B'){ 
     UPDATE Master SET B ='$B'+30 WHERE user_id='$id'"; 
    }elseif($column_name == 'C'){ 
     UPDATE Master SET C ='$C'+50 WHERE user_id='$id'"; 
    }  
} 
+0

Mr.Ahmadに返信してくれてありがとう、私は1つの疑問があります。または任意の簡単な方法? –

+0

それぞれの場合に追加する番号があります。 :20,30,50、列名をチェックする必要があります。追加する必要がある番号がすべて同じである場合(例: 20の場合、 'if'文は必要ありません:' UPDATE Master SET $ column_name = '$ column_name' + 20 WHERE user_id = '$ id' ";' - mysqlの 'CASE ... WHEN'文を使うことができますしかし、この方法はif文をPHPからmysqlに変換するだけです! –

+0

私は$ column_name = $ A(この値は他のテーブルから取得しています)+20(数値は異なります) –

1

あなたの要件はそう、私はそれ があなたの要件を満たすためにあなたを助けになると思う私には完全には明らかではないが。これはダイナミックなソリューションです。それがあなたの要件を明確にすることができない場合は、私はそれを解決するために最善を尽くす必要があります。質問してくれてありがとう。

* table schema is stakcoverflow 
* table name is master_tbl 
* fields name 
id | a | b | c 


<?php 
$myHost = "localhost"; // use your real host name ex. myDomainName.com 
$myUserName = "root"; // use your real login user name ex. myUserName 
$myPassword = ""; // use your real login password ex. myPassword 
$myDataBaseName = "stakcoverflow"; // use your real database name ex. myDataBaseName 

$con = mysqli_connect("$myHost", "$myUserName", "$myPassword", "$myDataBaseName"); 

if(!$con) // == null if creation of connection object failed 
{ 
    // report the error to the user, then exit program 
    die("connection object not created: ".mysqli_error($con)); 
} 

if(mysqli_connect_errno()) // returns false if no error occurred 
{ 
    // report the error to the user, then exit program 
    die("Connect failed: ".mysqli_connect_errno()." : ". mysqli_connect_error()); 
} 

$sql="SELECT a,b,c,id FROM master_tbl ORDER BY id"; 
$affectedrowsno = 0; 
if ($result=mysqli_query($con,$sql)) 
    { 
    // Get field information for all fields 
    while ($fieldinfo=mysqli_fetch_field($result)) 
    { 
     $column_name = $fieldinfo->name; 
     // Get field information for all fields 

     while ($row=mysqli_fetch_assoc($result)) 
     { 
      $a = $row['a']; 
      $b = $row['b']; 
      $c = $row['c']; 
      $id = $row['id']; 
      $sql = "UPDATE master_tbl SET $column_name=$a+20, $column_name=$b+50, $column_name=$c+80 WHERE id=$id"; 
      mysqli_query($con,$sql); 

      $affectedrowsno += count(mysqli_affected_rows($con)); 
     } 

    } 
    echo "Affected rows = " . $affectedrowsno; 
    // Free result set 
    mysqli_free_result($result); 

} 

mysqli_close($con); 

?> 
+0

Mr.Didar Alamに返答してくれてありがとうございます。 while文の外側で更新クエリを使用することはできますか? –

+0

いいえ、増分ではないため、ループの外側に置くと常に1が得られます。ループの内側で実行されるたびに影響を受けた行を返す1.理解してもらいたい。また、ループ外でクエリを更新する場合は、配列内のすべてのデータを収集する必要があります。更新クエリ自体の構文とニーズに合わせてそれらを管理する必要があります。 –

関連する問題