国强极客
有问题请加微信:guoqiang7585
国强极客

php 连表查询 并一次更新多条数据

php 连表查询 并一次更新多条数据

加入计数以及统计运行时间

conn.php文件内容

PHP连接MySQL服务器失败!";
    echo "系统错误信息:".mysqli_connect_error();
    die(); //中止程序向下运行
}

//(3)选择当前数据库
if(!mysqli_select_db($link,$db_name))
{
    echo "

选择数据库{$db_name}失败!

";
    die();
}

//(4)设置数据库返回数据字符集
mysqli_set_charset($link,$charset);

1/在foreach中执行数据库语句,简单,但是效率低

500 and dede_archives.typeid = dede_addonimages.typeid order by dede_archives.id desc "; //两个数据表inner join
$result = mysqli_query($link,$sql);//执行,输出结果集
$arrs = mysqli_fetch_all($result,1);
var_dump($arrs);
die();
$jishu = 0 ;//计数初始化
foreach ($arrs as $k => $v) {
    $taobaolongid=$v['id'];//获取id;
    $taobaolongtitle = $v['title'];

    $sql= "update dede_addonimages set taobaolonglink = '$taobaolongtitle' where aid = $taobaolongid";//插入新表
    $result = mysqli_query($link,$sql);//执行,输出结果集
   echo "ID为:$taobaolongid"." 标题为:$taobaolongtitle"."插入";
   echo var_dump($result);
   echo "
";
  // sleep(1);//延迟3秒执行下一次
    $jishu+= 1;//循环次数累加
}
$etime=microtime(true);//获取程序执行结束的时间
$total=$etime-$stime;   //计算差值
echo "
当前页面执行时间为:{$total} 秒";
echo "

总共插入$jishu"."次";

2/使用mysql语法格式来批量添加

上例中sql语法格式

UPDATE book
        SET Author = CASE id 
            WHEN 1 THEN '黄飞鸿' 
            WHEN 2 THEN '方世玉'
            WHEN 3 THEN '洪熙官'
        END
    WHERE id IN (1,2,3)
 $v) {
    $ids.= $v["id"].",";//
    $vtitle = $v['title'];
    //$sql .= sprintf("WHEN %d THEN %s ", $id, $v);
    $sql .= " WHEN ".$v['id']." THEN "."'$vtitle'";
}
$ids = rtrim($ids, ",");//去掉最后一个,
$sql .= " END WHERE aid IN ($ids)";
//echo $sql; 查看sql语句
//die();
$result = mysqli_query($link,$sql);//执行,输出结果集
var_dump($result);

$etime=microtime(true);//获取程序执行结束的时间
$total=$etime-$stime;   //计算差值
echo "
当前页面执行时间为:{$total} 秒";
echo "

总共插入$jishu"."次";

使用replace into语法批量 危险 了解 慎重

replace into 操作本质是对重复的记录先delete 后insert,如果更新的字段不全会将缺失的字段置为缺省值,用这个要悠着点!否则不小心清空大量数据可不是闹着玩的!!!

除了更新的字段,其他都变成默认值了;

replace into 表名l (id,字段1) values (1,'2'),(2,'3'),...(x,'y');//语法格式
 $v) {
$vid=$v["id"];
    $vtitle = $v['title'];
    $sql .= '('.$vid.','."'$vtitle'".')'.',';
}
$sql = rtrim($sql,',');
//echo $sql; //查看sql语句
//die();
$result = mysqli_query($link,$sql);//执行,输出结果集
var_dump($result);

$etime=microtime(true);//获取程序执行结束的时间
$total=$etime-$stime;   //计算差值
echo "
当前页面执行时间为:{$total} 秒";

insert into …on duplicate key update批量更新

insert .. on deplicate udpate保留了所有字段的旧值,再覆盖然后一起insert进去,而replace没有保留旧值,直接删除再insert新值。
从底层执行效率上来讲,replace要比insert .. on deplicate update效率要高,但是在写replace的时候,字段要写全,防止老的字段数据被删除。
replace into 操作本质是对重复的记录先delete 后insert,如果更新的字段不全会将缺失的字段置为缺省值,用这个要悠着点否则不小心清空大量数据可不是闹着玩的。

insert into 表名l (id,字段1) values (1,'2'),(2,'3'),...(x,'y') on duplicate key update 字段1=values(字段1);
insert into book (`Id`,`Author`,`CreatedTime`,`UpdatedTime`) values (1,'张飞2','2017-12-12 12:20','2017-12-12 12:20'),(2,'关羽2','2017-12-12 12:20','2017-12-12 12:20') on duplicate key update Author=values(Author),CreatedTime=values(CreatedTime),UpdatedTime=values(UpdatedTime);
insert into tran_test (f1,f2) values ("A3",2),("B3",3) on duplicate key update f2=values(f2);
 $v) {
$vid=$v["id"];
    $vtitle = $v['title'];
    $sql .= '('.$vid.','."'$vtitle'".')'.',';

}
$sql = rtrim($sql,',');
$sql .=" on duplicate key update taobaolonglink=values".'('.'taobaolonglink'.')';
//echo $sql;

$result = mysqli_query($link,$sql);//执行,输出结果集
var_dump($result);


$etime=microtime(true);//获取程序执行结束的时间
$total=$etime-$stime;   //计算差值
echo "
当前页面执行时间为:{$total} 秒";

赞赏
对内容有疑问,请加我微信:guoqiang7585
#
首页      程序开发      后台语言      php 连表查询 并一次更新多条数据

国强极客

文章作者

博客站长,有问题请加微信【guoqiang7585】。

国强极客

php 连表查询 并一次更新多条数据
加入计数以及统计运行时间 conn.php文件内容 PHP连接MySQL服务器失败!"; echo "系统错误信息:".mysqli_connect_error(); die(); //中止程序向下运行 } //(3)选择当前数…
扫描二维码继续阅读
2019-11-26