今天做项目遇到的问题,都是一些小细节,特此记录一下,以后方便查阅。
连接两个数据库,获取数据库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)