2017-01-28 7 views
1

2番目のテーブルにある新しい一意の電話番号で列全体を更新する必要があります。正しい軌道に乗っているようですが、私のループロジックに問題があります。SQL結合文PHPループで列全体を更新する

マッチを正確に返信していますが、テーブルの列全体を更新しようとすると、最後の電話番号がすべての行に挿入されます。

$query = "SELECT matched.duns, matched.new_p1, users_data.temp_duns 
      FROM matched 
      INNER JOIN users_data ON temp_duns 
      WHERE temp_duns = duns LIMIT 10"; 
$result = mysqli_query($connection, $query); 

foreach ($result as $key => $val) { 
     if($val['duns'] === $val['temp_duns']) { 
      $final_query = "UPDATE users_data SET phone_number = " . $val['new_p1']; 
      $final_result = mysqli_query($connection, $final_query);   
      echo $counter . "DUNS From matched: " . $val['duns'] . " DUNS From users_data: " . $val['temp_duns'] . " NEW PHONE: ". $val['new_p1']. "<br>"; 
     }  
    } 

私は全く新しいものですが、助けていただければ幸いです。

答えて

0

単純にループなしとMySQL INNER JOINに1回の呼び出しで更新クエリを実行するには、使用することができます:

UPDATE user_data u 
INNER JOIN matched m ON u.temp_duns = m.temp_duns 
SET u.phone_number = m.new_p1; 

または10の制限のために:

UPDATE user_data u 
INNER JOIN (SELECT * FROM matched LIMIT 10) m ON u.temp_duns = m.temp_duns 
SET u.phone_number = m.new_p1; 
+0

はい...似たようなことをしています... SQLを使用してPHPループを削除しています。私は行ってテーブルの1つでいくつか変更する必要があったが、私は働いている単純なSQLで巻き上げた。 UPDATE users_data INNER JOINダミーテーブル オンdummytable.user_id = users_data.user_id SET users_data.phone_number = dummytable.phone_num –

+0

素晴らしい!あなたは一日の終わりにあなたのデータを知っています。解決策が助けられた場合、解決を確認するために受け入れてください(横にチェックマークを付けてください)。 – Parfait

0

クエリにはWHERE句がないため、すべての行が更新されています。

"UPDATE users_data SET phone_number = " . $val['new_p1'];

あなたは更新したいだけの行に制限する必要があります。

"UPDATE users_data SET phone_number = " . $val['new_p1'] . " WHERE some_id = " . $some_id;

おそらく、単一のクエリで全体のことを行うことができます。

UPDATE table_to_be_updated JOIN table_with_value_we_need ON whatever_joins_them SET table_to_be_updated.column_we_want_to_fill = table_with_value_we_need.value_we_need;

+0

はい私は実際にこの質問を投稿した直後にwhere句を追加しても動作しませんでした。問題は私の部分と私のテーブルでした.....しかし、私はループのない単純なSQL文を使いました。ありがとう –

関連する問題