Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于两个表的PHP/MySQL更新和插入_Php_Mysql - Fatal编程技术网

基于两个表的PHP/MySQL更新和插入

基于两个表的PHP/MySQL更新和插入,php,mysql,Php,Mysql,我已经讨论了几天了,一直在遇到绊脚石。我试图从表2中选择一个唯一的id,并将其与表1中的id进行匹配。如果id匹配,则更新表1中的行并从表2中删除该记录。如果没有匹配项,则将记录插入表1 我已经到了可以更新记录并插入新记录的地步,但我似乎无法在插入之前删除匹配的记录,因此创建了一个副本。我在更新后尝试了删除联接查询,但由于新的登录id前面有一个字符,它在表2中不再匹配 我以前做过更新连接,但是我有太多的查询,所以我尽量保持简单 有什么建议吗?这场比赛还是新手 $table2_query =

我已经讨论了几天了,一直在遇到绊脚石。我试图从表2中选择一个唯一的id,并将其与表1中的id进行匹配。如果id匹配,则更新表1中的行并从表2中删除该记录。如果没有匹配项,则将记录插入表1

我已经到了可以更新记录并插入新记录的地步,但我似乎无法在插入之前删除匹配的记录,因此创建了一个副本。我在更新后尝试了删除联接查询,但由于新的登录id前面有一个字符,它在表2中不再匹配

我以前做过更新连接,但是我有太多的查询,所以我尽量保持简单

有什么建议吗?这场比赛还是新手

$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.'";');