首页 后端开发 php教程 PHP中如何实现批量更新mysql中的数据

PHP中如何实现批量更新mysql中的数据

Jul 26, 2018 am 11:46 AM
批量更新

本篇文章给大家分享的内容是关于PHP如何批量更新MYSQL中的数据,内容很详细,有需要的朋友可以参考一下,希望可以帮助到你们。

在这个业务里里面涉及到了更新两张数据表,那么大家是不是会想到非常简单,马上上代码

$sql = "update newhouse_clicks set clicks=6,type=1,update_time=time() where is=$value['id']";
登录后复制

 其中数据表名为newhouse_clicks,有四个字段,主键id,type(类型-整型)字段,clicks(点击量-整型)字段,update_time(整型)字段
这样做确实没有问题吗?比如说批量更新当前城市下的所有楼盘,比如说北京,打个比方1000条数据,那么在业务里面是不是就要这样写

$data = array(id=>1,id=>2,..........id=>1000);//省略数据
foreach($data as $key=>$value) {
    $sql = "update newhouse_clicks set clicks=6,type=1,update_time=time() where is=$value['id']";
}
登录后复制

 这样在涉及到多张表*1000条数据,那么会不会有很大的延时呢?

结果是的,她这样写确实是导致了服务器的超时!

大家如果熟悉JAVA等语言应该知道,JAVA会内部提供了批量更新sql的功能,那么作为世界上做好的语言PHP能不能做到呢?答案是可以滴!

那么我们学习一下批量更新的sql语句。

UPDATE newhouse_clicks
    SET clicks = CASE id
        WHEN 1 THEN 1000
        WHEN 2 THEN 2000
        WHEN 3 THEN 3000
    END
WHERE id IN (1,2,3)
登录后复制

稍安勿躁,咱们详解一下这条sql语句的意思:
更新newhouse_clicks数据表中的clicks字段,当id=1是设置值为1000,当id=2时设置值为2000,当id=3时设置值为3000


那么更新多个字段能不能做到呢?当然可以,贴代码:

UPDATE newhouse_clicks
    SET clicks = CASE id
        WHEN 1 THEN 1000
        WHEN 2 THEN 2000
        WHEN 3 THEN 3000
    END,
    type = CASE id
        WHEN 1 THEN 1
        WHEN 2 THEN 6
        WHEN 3 THEN 8
    END
WHERE id IN (1,2,3)
登录后复制

这条sql语句的含义就是更新newhouse_clicks数据表中的clicks字段,当id=1是设置值为1000,当id=2时设置值为2000,当id=3时设置值为3000,更新type字段,当id=1时更新为type字段为1,当id=2时更新type字段为6,当id=3时,更新type字段为8。
那么,世界上最好的语言PHP不就可以拼出来sql了吗?

//查询数据库返回的数据格式
$newhouse_clicks = array(
=> 2,
=> 3,
=> 8,
=> 9,
  );
$ids = implode(',', array_keys($newhouse_clicks ));
$sql = "UPDATE newhouse_clicks SET clicks = CASE id ";
foreach ( $newhouse_clicks as $key => $value) {
    $sql .= sprintf("WHEN %d THEN %d ", $key, $value);
}
$sql .= "END WHERE id IN ($ids)";
echo $sql;
登录后复制

大家查看一下是不是和咱们上面的sql语句是一样的呀!

那么,咱们真是的数据是不是要比这复杂呀?肯定的,看题,咱们通常在数据库里面取出来的数据格式是不是都是这样的。

//查询数据库返回的数据格式
$newhouse_clicks = array(
=> array('clicks'=>1,'type'=>1,'update_time'=>time()),
=> array('clicks'=>2,'type'=>2,'update_time'=>time()),
=> array('clicks'=>3,'type'=>3,'update_time'=>time()),
=> array('clicks'=>4,'type'=>4,'update_time'=>time()),
);
?>
登录后复制

那么,这种情况怎么办?

<?php
//查询数据库返回的数据格式
$newhouse_clicks = array(
=> array(&#39;clicks&#39;=>1,&#39;type&#39;=>1,&#39;update_time&#39;=>time()),
=> array(&#39;clicks&#39;=>2,&#39;type&#39;=>2,&#39;update_time&#39;=>time()),
=> array(&#39;clicks&#39;=>3,&#39;type&#39;=>3,&#39;update_time&#39;=>time()),
=> array(&#39;clicks&#39;=>4,&#39;type&#39;=>4,&#39;update_time&#39;=>time()),
);
    //获取所有的id
    $newhouse_clicks_keys = array_keys($newhouse_clicks);
    //拼接批量更新sql语句
    $sql = "UPDATE newhouse_clicks SET ";
    //合成sql语句
    foreach ($newhouse_clicks[1] as $key => $value) {
        $sql .= "{$key} = CASE id ";
        foreach ($newhouse_clicks as $newhouse_clicks_key=>$newhouse_clicks_value) {
 
            $sql .= sprintf("WHEN %d THEN %d ", $newhouse_clicks_key, $newhouse_clicks_value[$key]);
        }
        $sql .= "END, ";
    }
    //把最后一个,去掉
    $sql = substr($sql, 0, strrpos($sql,&#39;,&#39;)); 
    //合并所有id
    $ids = implode(&#39;,&#39;, $newhouse_clicks_keys);
    //拼接sql
    $sql .= " WHERE ID IN ({$ids})";
    echo $sql;
登录后复制

其实,写了这么一大堆,是不是就是为了拼装成mysql语句呀。

大功告成!速度是不是像丝般顺滑!

        老多程序员特别是初学者,很容易进入一个误区,把在sql中取数据套在for循环里面。这样写导致一个问题,就是严重的阻塞,现实生活中就有这样一个例子:

        比如说,你在12层办公,这是快递员给你打电话让你去楼下取快递(总共12件),你去取快递有两种方式:

        1.拿到第一件快递,跑回12层,放好后,接着去领取下一件快递,放好12层后再接着去取下一件快递。

        2.一次性把所有的快递都拿到12层。

        大家一定都会选第二个方案吧,没人会傻不拉几的去跑12次才能拿完快递的。

        计算机就是上述原理,在for循环里面去资源取数据,就是类似第一种方案。批量取数据就是类似于第二种方案。(PS一下:不要以为在mysql中取数据有这种问题,redis也会

有这种问题,要不然怎么会有pipeline取批量数据呢,这一点在面试的时候我是经常当面试题去问的,绝对会成为衡量一个人技术水平的标准)

 相关推荐:

php中mvc原理是什么?php的mvc实现原理的介绍(附代码)

PHP如何上传文件到七牛的方法代码

以上是PHP中如何实现批量更新mysql中的数据的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
2 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Oracle存储过程实现批量更新的步骤与注意事项 Oracle存储过程实现批量更新的步骤与注意事项 Mar 08, 2024 pm 04:12 PM

标题:Oracle存储过程实现批量更新的步骤与注意事项在Oracle数据库中,存储过程是一组为了提高数据库性能、重用代码、增强安全性的SQL语句集合,通过存储过程可以实现批量更新数据的操作。本文将介绍如何使用Oracle存储过程实现批量更新,并提供具体的代码示例。步骤一:创建存储过程首先,我们需要创建一个存储过程,用来实现批量更新的操作。以下是创建存储过程的

Oracle存储过程批量更新在数据处理中的应用案例 Oracle存储过程批量更新在数据处理中的应用案例 Mar 08, 2024 am 10:24 AM

Oracle存储过程批量更新在数据处理中的应用案例在实际的数据处理中,我们经常需要对数据库中的大量数据进行更新操作。Oracle数据库提供了存储过程的功能,可以有效地处理这些大批量数据更新的操作,提高数据处理效率和性能。在本文中,我们将介绍Oracle存储过程批量更新的应用案例,并且提供具体的代码示例,帮助读者更好地理解和运用这一功能。案例背景假设我们有一个

Vue和Excel的默契合作:如何实现数据的批量更新和导入 Vue和Excel的默契合作:如何实现数据的批量更新和导入 Jul 22, 2023 pm 09:03 PM

Vue和Excel的默契合作:如何实现数据的批量更新和导入引言:随着信息技术的快速发展,Excel表格作为一种流行的数据管理工具,被广泛应用于各个行业和领域。与此同时,Vue作为一种灵活、高效的前端开发框架,也广受欢迎。本文将介绍如何通过Vue和Excel的默契合作,实现数据的批量更新和导入。为了帮助读者更好地理解,我们将给出代码示例。实现数据批量更新:在V

如何在Hibernate中执行批量插入更新操作? 如何在Hibernate中执行批量插入更新操作? Aug 27, 2023 pm 11:17 PM

在本文中,我们将看到如何在Hibernate中执行批量插入/更新。每当我们执行一条sql语句时,我们都是通过对数据库进行网络调用来完成的。现在,如果我们必须向数据库表中插入10个条目,那么我们必须进行10次网络调用。相反,我们可以通过使用批处理来优化网络调用。批处理允许我们在单个网络调用中执行一组SQL语句。为了理解和实施这一点,让我们定义我们的实体−@EntitypublicclassParent{@Id@GeneratedValue(strategy=GenerationType.AUTO)

Vue和Excel的高效组合:如何实现数据的批量更新和导入 Vue和Excel的高效组合:如何实现数据的批量更新和导入 Jul 21, 2023 pm 10:00 PM

Vue和Excel的高效组合:如何实现数据的批量更新和导入随着Web应用程序的不断发展和数据量的不断增加,我们经常会遇到需要批量更新和导入数据的情况。而Excel作为一种广泛使用的电子表格工具,具有强大的数据处理和导入导出功能,成为我们处理大量数据的首选工具之一。本文将介绍如何使用Vue和Excel实现数据的批量更新和导入,以提高数据处理的效率。首先,我们需

Java开发中如何解决数据库更新性能问题 Java开发中如何解决数据库更新性能问题 Jun 29, 2023 pm 01:00 PM

Java开发中如何解决数据库更新性能问题摘要:随着数据量的增加和业务的变化,数据库更新的性能问题成为了Java开发中一大挑战。本文将介绍一些常见的解决数据库更新性能问题的方法和技巧。关键词:Java开发,数据库,更新性能问题,解决方法引言:在大多数Java应用程序中,数据库扮演着重要的角色。数据库的性能直接影响了应用程序的响应速度和稳定性。而在实际开发中,数

MySQL中的批次更新方法 MySQL中的批次更新方法 Jun 15, 2023 pm 11:36 PM

MySQL是一种广泛使用的关系型数据库管理系统,其提供了许多有效的数据操作方法。当需要更新大量数据时,可以使用批次更新方法来提高效率。本文将介绍MySQL中的批次更新方法。一、什么是批次更新?批次更新是指通过一条SQL语句来更新多个数据行。相比于每次更新一行的方法,批次更新能够有效降低数据库的负载和网络传输时间,提升数据操作的效率和速度。二、批次更新的实现方

Oracle存储过程批量更新实现方法 Oracle存储过程批量更新实现方法 Mar 08, 2024 pm 12:27 PM

标题:Oracle存储过程批量更新实现方法在Oracle数据库中,使用存储过程批量更新数据是一种常见的操作。通过批量更新可以提高数据处理的效率,减少对数据库的频繁访问,同时也能减少代码的复杂性。本文将介绍如何在Oracle数据库中使用存储过程实现批量更新数据的方法,并给出具体的代码示例。首先,我们需要创建一个存储过程,该存储过程将实现批量更新数据的功能。下面

See all articles