PHP 连接两个数据库合并两个表,并去掉重复数据

∫`不撒娇的折耳猫 2020-3-27 1018

今天做项目遇到的问题,都是一些小细节,特此记录一下,以后方便查阅。

连接两个数据库,获取数据库A中表A的数据,然后获取数据库B中表B的数据,可以合并到新的表C,我嫌麻烦就直接合并到了数据表B中,由于重复数据不多,我自己也不是很确定,所以实现思路是:先导入然后查重。(如果重复比较多,可以先查重,不重复后导入,视具体情况而定)以“mobile”来做查重字段(也可多个),排查重复数据,实现合并并删除重复数据。下面是具体实现代码:

<?php    
     header("Content-type:text/html;charset=utf-8");  
     //第一个数据库连接数据  
     $servername1 = "localhost";    
     $username1 = "root";    
     $password1 = "root";    
     $dbname1 = "gbook";    
     $link1= new mysqli($servername1,$username1,$password1,$dbname1); // 注意第四个参数    
     if($link1->connect_error){        
         die("连接失败,错误:" . $link1->connect_error);    
     }   
     //第二个数据库连接数据
     $servername2 = "localhost";    
     $username2 = "root";    
     $password2 = "root";    
     $dbname2 = "wwxiong";    
     $link2= new mysqli($servername2,$username2,$password2,$dbname2); // 注意第四个参数    
     if($link2->connect_error){        
         die("连接失败,错误:" . $link2->connect_error);    
     }    
     
     mysqli_set_charset($link1,'utf8'); // 解决乱码问题    
     mysqli_set_charset($link2,'utf8'); // 解决乱码问题  
       
     $sql1="SELECT * FROM `code`";//查询第一个库中表中的数据   
     $res = $link1->query($sql1);    
     //插入记录    
     if($res){        
         while($arr = $res->fetch_assoc()){            
             $sql = "insert into yzcode(id,mobile,code) values(".$arr["id"].",".$arr["mobile"].",".$arr["code"].")";// 合并数据            
             if($link2->query($sql) === TRUE){                
                  echo "新记录添加成功!";            
             }else {                
                  echo "新记录添加失败,错误信息:" . $link2->error;            
             }            
             echo "<br>";        
         }    
      }    
      //查重+删除重复数据    
      //$checksql = 'select *,count(distinct mobile) from yzcode group by mobile';//返回的是不重复的数据    
      $checksql = 'select *,count(*) from yzcode group by mobile having count(*) > 1';//返回的是重复的数据    
      $checkres = $link2->query($checksql);    
      if($checkres){        
          while($arr = $checkres->fetch_assoc()){            
              print_r($arr);            
              $deletesql = "delete from yzcode where id = ".$arr["id"];//id作为主键的话            
              if($link2->query($deletesql) === TRUE) {                
                  echo "删除成功";            
              }else {
                  echo "删除失败,错误信息为:" . $link2->connect_error;            
              }            
              echo '<br />';        
          }    
      }    
      // 关闭连接    
      $link1->close();    
      $link2->close();

为了增加查询效率,也可以给查重字段增加索引,语法如下:

ALTE TABL 表名 AD 索引类型 (unique,primary key,fulltext,index)[索引名](字段名)

具体应用语句如下:

//增加普通索引
alter table table_name add index yzcode_mobile (mobile)


最新回复 (0)
发新帖