基于两个表的PHP/MySQL更新和插入
我已经讨论了几天了,一直在遇到绊脚石。我试图从表2中选择一个唯一的id,并将其与表1中的id进行匹配。如果id匹配,则更新表1中的行并从表2中删除该记录。如果没有匹配项,则将记录插入表1 我已经到了可以更新记录并插入新记录的地步,但我似乎无法在插入之前删除匹配的记录,因此创建了一个副本。我在更新后尝试了删除联接查询,但由于新的登录id前面有一个字符,它在表2中不再匹配 我以前做过更新连接,但是我有太多的查询,所以我尽量保持简单 有什么建议吗?这场比赛还是新手基于两个表的PHP/MySQL更新和插入,php,mysql,Php,Mysql,我已经讨论了几天了,一直在遇到绊脚石。我试图从表2中选择一个唯一的id,并将其与表1中的id进行匹配。如果id匹配,则更新表1中的行并从表2中删除该记录。如果没有匹配项,则将记录插入表1 我已经到了可以更新记录并插入新记录的地步,但我似乎无法在插入之前删除匹配的记录,因此创建了一个副本。我在更新后尝试了删除联接查询,但由于新的登录id前面有一个字符,它在表2中不再匹配 我以前做过更新连接,但是我有太多的查询,所以我尽量保持简单 有什么建议吗?这场比赛还是新手 $table2_query =
$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.';
}
$table2\u query=“从表2中选择*”;
$table2\u result=mysql\u查询($table2\u查询);
$table2\u count=mysql\u num\u行($table2\u result);
如果($table2_count==0){
if(mysql_error()){
echo“Error:”.mysql_Error();
}
}
而($table2\u row=mysql\u fetch\u array($table2\u result,mysql\u ASSOC)){
$check_number_length=strlen($table2_row['unique_id');
如果($check_number_length<7){
if(substr($table2_行['unique_id'],0,2)<35){
$logon_id='n'。$table2_行['unique_id'];
}否则{
$logon_id='v'.$table2_行['unique_id'];
}
}否则{
$logon_id=$table2_行['unique_id'];
}
//为创建新用户记录的插入查询设置变量
$first_name=$table2_行['firstname'];
$last_name=$table2_行['lastname'];
$email_address=$table2_行['email'];
$duplicates\u query=“从表1中选择*,其中“$logon\u id”=logon\u id”;
$duplicates\u result=mysql\u query($duplicates\u query);
$duplicates\u row=mysql\u fetch\u数组($duplicates\u result);
$duplicates\u count=mysql\u num\u行($duplicates\u result);
如果($duplicates\u count==0){
if(mysql_error()){
echo“Error:”.mysql_Error();
}
}否则{
$update\u records\u query=“update table1 SET first\u name='$first\u name',last\u name='$last\u name',email\u address='$email\u address';
$update\u records\u result=mysql\u query($update\u records\u query);
$update_records_count=mysql_受影响的_行();
echo$update\u records\u count;
}
$create_records_query=“在表1(名字、姓氏、电子邮件地址)中插入值(“$first_name”、“$last_name”、“$email_address”)”;
$create\u records\u result=mysql\u query($create\u records\u query);
$create_records_count=mysql_infected_rows();
if($create\u records\u count==0){
if(mysql_error()){
echo“Error:”.mysql_Error();
}
}
echo$create_records_count.“已创建记录”;
}
删除表1上登录\u id开头的n
UPDATE table1 set login_id = replace(login_id,"n","");
如果在登录\u id开始时删除n,则新建更新查询
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.'";');
请做一个“更干净”的示例。那么,是什么使您无法运行删除查询?抱歉@GabrielSantos试图使其尽可能干净,但希望确保所有内容都可以通过。我已经删除了很多无关的东西,抱歉。做一些像
if($table2\u count==0){//SHOW ERROR}
@Col.shrapanel更新之后,我进行了一次删除连接查询,以从表2中删除与我刚刚插入到表1中的id匹配的用户,但在执行插入时,该用户的前面加了一个表2中不存在的字符,因此我找不到删除该用户的记录。希望这有道理。谢谢你。我还没有尝试过,但是更新、删除和插入是否真的有效?$logon\u id变量将在表2中的logon\u id前面加上一个字符,那么我真的能够使用WHERE找到它吗?例如,table2登录id=123456,table1是n123456,脚本在n前面加上从table2中选择的登录id,例如n123456,使其与table1匹配以进行更新。我可以进行更新,但无法回头查看表2以删除记录,因为登录id现在已不同。已更改查询,请尝试并告诉我其工作原理。还添加了一个查询以从表1的登录id中删除n。如果选择从登录id中删除n,则上一个新查询的性能会更好。
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.'";');