2012-01-07 11 views
0

私は数日間この問題を解決し続けており、つねに障害物に到達しています。私はtable2から一意のIDを選択し、それをtable1のIDと照合しようとしています。 idが一致する場合は、table1の行を更新し、table2からレコードを削除します。一致するものがなければ、レコードをtable1に挿入します。2つのテーブルに基づいてPHP/MySQLの更新と挿入

私はレコードを更新して新しいレコードを挿入することができますが、挿入前に一致するレコードを削除して複製を作成することはできません。私は更新後に削除結合クエリを試しましたが、新しいlogon_idに文字が前に付いているため、もはやtable2に一致しません。

私は更新のために前もって更新を行っていましたが、あまりにも多くのクエリを実行していましたので、単純にしておきます。

アドバイスはありますか?まだこのゲームでは新奇です。

$table2_query = "SELECT * FROM table2"; 
$table2_result = mysql_query($table2_query); 
$table2_count = mysql_num_rows($table2_result); 

    if($table2_count == 0)  { 

     if(mysql_error()) { 
     echo 'Error: '.mysql_error(); 
     } 

    } 

while($table2_row = mysql_fetch_array($table2_result, MYSQL_ASSOC))  { 

    $check_number_length = strlen($table2_row['unique_id']); 

     if($check_number_length < 7) { 

      if(substr($table2_row['unique_id'], 0, 2) < 35) { 
       $logon_id = 'n' . $table2_row['unique_id']; 
      }else { 
       $logon_id = 'v' . $table2_row['unique_id']; 
      } 

     }else { 
      $logon_id = $table2_row['unique_id']; 
     } 

    // Set variables for insert query for creation of a new user record 
    $first_name  = $table2_row['firstname']; 
    $last_name   = $table2_row['lastname']; 
    $email_address = $table2_row['email']; 


    $duplicates_query = "SELECT * FROM table1 WHERE '$logon_id' = logon_id"; 
    $duplicates_result = mysql_query($duplicates_query); 
    $duplicates_row = mysql_fetch_array($duplicates_result); 
    $duplicates_count = mysql_num_rows($duplicates_result); 

     if($duplicates_count == 0) { 

      if(mysql_error()) { 
      echo 'Error: '.mysql_error(); 
      } 

     }else { 
      $update_records_query  = "UPDATE table1 SET first_name='$first_name', last_name='$last_name', email_address='$email_address'"; 
      $update_records_result  = mysql_query($update_records_query); 
      $update_records_count  = mysql_affected_rows(); 
      echo $update_records_count; 
     } 

    $create_records_query = "INSERT INTO table1 (first_name, last_name, email_address) VALUES ('$first_name', '$last_name', '$email_address')"; 
    $create_records_result = mysql_query($create_records_query); 
    $create_records_count = mysql_affected_rows(); 

     if($create_records_count == 0){ 

      if(mysql_error()){ 
       echo 'Error: '.mysql_error(); 
      } 
     } 

    echo $create_records_count . ' record(s) created.'; 

} 
+0

でください開始きれいな "サンプル。 –

+0

それで、あなたはそのDELETEクエリを実行できません。 –

+0

申し訳ありません@GabrielSantosは可能な限りきれいにしようとしましたが、すべてがステップスルーできることを確認したかったのです。私は無関心なものをたくさん削除しました、謝罪します。 –

答えて

0
$res = mysql_query ("SELECT count(table1.login_id) AS count FROM table2 LEFT JOIN table1 ON table2.login_id = table1.login_id WHERE table2.login_id = \"".$login_id."\";") or die ("Error joining tables"); 
    /*joins both tables together and selects both id's from tables */ 

    $row = mysql_fetch_assoc($res); // should only return one row so grab first 

    if ($row['count'] > 0) { // check if id exists in both tables (duplicates) 
      // updates rows from one table into another 
      mysql_query('UPDATE table1,table2 SET table1.username = table2.username, table1.password = table2.password, table1.email = table2.email WHERE table1.login_id = "'.$login_id.'" AND table2.login_id = "'.$login_id.'";') or die ("error updating table1"); 

      //delete old row 
      mysql_query('DELETE FROM table2 WHERE login_id = "'.$login_id.'";') or die("error deleting from table2"); 


    }else { // if id doesn't exist in table1 
      mysql_query ("INSERT INTO table1(username,password,email) SELECT username,password,email FROM table2 where login_id = '".$login_id."';") or die ("error inserting into table1"); 
    } 

削除した場合でのn TABLE1にLOGIN_IDの先頭に

UPDATE table1 set login_id = replace(login_id,"n",""); 

新しい更新クエリをn個を削除「more-を行い、LOGIN_ID

mysql_query ('UPDATE table1,table2 SET table1.username = table2.username, table1.password = table2.password, table1.email = table2.email WHERE table1.login_id = table2.login_id AND table1.login_id = "'.$login_id.'";'); 
+0

また、mysqlの代わりにmysqliを使用して、パフォーマンスを向上させてみてください。 – Randomfan

+0

ありがとうございます。私はまだ試していないが、更新、削除、挿入は実際に動作するのだろうか? $ logon_id varはtable2からlogon_idを文字の前に付けるので、実際にはWHEREを使って見つけることができますか?例えば。テーブル2ログオンID = 123456、テーブル1はn123456、スクリプトはテーブル2から選択されたログオンIDにnを付加します。 n123456を更新してtable1と照合して更新します。私は更新することができますが、私は今login_idが異なるので、レコードを削除するためにtable2を振り返ることはできません。 –

+0

でクエリを変更してみて、それを試してみて、どのように動作するかを教えて、table1上のlogin_idからnを削除するクエリを追加しました。また、最後の新しいクエリは、login_idからnを削除すると良いでしょう。 – Randomfan

関連する問題