gpt4 book ai didi

php - 批量插入/更新 PDO MySQL 查询

转载 作者:行者123 更新时间:2023-11-30 00:26:49 25 4
gpt4 key购买 nike

我正在为 Symfony2 项目编写一个新函数,该函数处理许多条目(大约 30k),有许多数据库托管在不同的服务器中,因此性能非常重要,为了提高我们的应用程序的速度,我们有一个核心数据库,数据不多,该数据库在一个数据库中有一个缓存表,还有另一个数据库来存储所有事务。

缓存表如下所示:

+----------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| object_id | int(11) | NO | MUL | NULL | |
| object_type | int(11) | NO | | NULL | |
| sum24h | int(11) | NO | | NULL | |
| sum3d | int(11) | NO | | NULL | |
| sum7d | int(11) | NO | | NULL | |
| sum30d | int(11) | NO | | NULL | |
| sum_alltime | int(11) | NO | | NULL | |
+----------------+---------+------+-----+---------+----------------+

它只包含数据的总和,因此我想构建一个 MySQL PDO 查询来更新数据,或者如果条目是新的则插入它

INSERT INTO `table`
(object_id,object_type, sum24h,sum3d,sum7d,sum30d,sum_alltime)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?),
(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
ON DUPLICATE KEY UPDATE object_id = ?, object_type = ?, sum24h = ?, sum3d = ?, sum7d = ?, sum30d = ?, sum_alltime = ?

因此,这适用于一个值,但就我而言,我想设置相应的值,例如现有值:

$data1 = array('object_id' => 1, 'object_type'=> 1,
'sum24h' => 11101, 'sum3d' => 301, 'sum7d' => 701, 'sum30d' => 3001, 'sum_alltime' => 10001);

$data2 = array('object_id' => 2, 'object_type'=> 1,
'sum24h' => 401, 'sum3d' => 101, 'sum7d' => 801, 'sum30d' => 1001, 'sum_alltime' => 2001);

假设两个对象都存在于数据库中,可以使用单个查询来更新这两个对象吗?

PD:我会使用 Doctrine 来做到这一点,但遗憾的是涉及太多操作并且需要太长时间,我会在远程服务器中运行 Cronjob 脚本,但这不是我希望的:S

最佳答案

解决方案非常简单

INSERT INTO `table` (object_id,object_type,sum24h,sum3d,sum7d,sum30d,sum_alltime)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?),(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
ON DUPLICATE KEY UPDATE object_id = VALUES(object_id),object_type = VALUES(object_type),sum24h = VALUES(sum24h),sum3d = VALUES(sum3d),sum7d = VALUES(sum7d),sum30d = VALUES(sum30d),sum_alltime = VALUES(sum_alltime)

关于php - 批量插入/更新 PDO MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22812568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com