0

MYSQL テーブル -> T(プレイヤー、ID)

同じ (1 つだけ) ID と 10 人の異なるプレーヤーのこの MYSQL テーブルを更新しようとしています。これは私がしました。

for($k=0;$k<10;$k++)
    {       
       echo $newPlayer[$k];

       $que = "UPDATE `players` SET `player`='".$newPlayer[$k]."' WHERE `id`='".$id."'";
       $db_con->exec($que);
    }

$newPlayer配列をエコーすると、正しい値が表示されるため、クエリが機能しないのはなぜですか。

テーブル 'T' に 11 の行を追加し、11 の異なるプレーヤーの値と同じ id の値を指定する必要があります。ただし、テーブルに追加されるプレーヤーの値は 1 つだけです。どうして??

4

1 に答える 1

0

ステートメントは、update 挿入データではなく更新データに使用されます。したがって、更新では、テーブルに既にあるもののみを変更でき、新しいものは何も作成されません。

新しいデータを挿入する場合は、insertステートメントを使用する必要があります。

投稿するコマンドを使用して、データベースに言っています

ちょっと男はテーブルの値で属性を変更player'".$newPlayer[$k]."'ますidplayear'".$id."'"

したがって、コメントで説明されているように、ここでのより良い解決策は次のとおりです。

update players p, 
  (select id, player, substring_index( substring_index(lst, ',', idx), ',', -1) as pl
     from (select p.*, @number := @number+1 as idx, lst 
             from players p,
                 (select @number := 0 as nb) n,
                 (select 'i,j,k,l,m,n,o,p' as lst) lst) x ) a 
set p.player = a.pl
where p.id = a.id 
  and p.player = a.player

ただし、PHP の場合は、配列を間にスペースを入れずに$newPlayera で区切った文字列として作成する必要があります。,

このようなもの:

$newNames = implode(",",$newPlayer);

 $que = "update players p, 
      (select id, player, substring_index( substring_index(lst, ',', idx), ',', -1) as pl
         from (select p.*, @number := @number+1 as idx, lst 
                 from players p,
                     (select @number := 0 as nb) n,
                     (select '$newNames' as lst) lst) x ) a 
    set p.player = a.pl
    where p.id = a.id 
      and p.player = a.player";

$db_con->exec($que);

これであなたは必要ありませんfor

于 2013-10-26T16:36:39.697 に答える