php - 如何合并到数据库

标签 php mysql database collections

我找不到解决这个问题的最佳方法,

I have two different list of items, one in the DB, one not. Both list have item ids and quantity, I need to merge the two list into the DB.

我的第一个倾向是将所有项目从数据库中提取出来,然后在应用程序逻辑中合并这两个列表。然后我将从数据库中删除旧列表并插入新的合并列表。

我想我也可以更新/插入我想合并到数据库中的每个项目,但这将意味着很多查询(也许有一个我可以写的存储过程,但我对存储过程不是那么热).

我想知道在这种情况下 SQL 或应用程序逻辑是否会执行得更好?

我也想听听其他人如何解决这个问题。

谢谢。

更新:

这里有更多的细节,

这不是一次合并,它会发生多次。基本上我的应用程序中有一个对象包含项目列表,最终这些项目需要放入数据库中。数据库中已经有项目,所以我不能只插入项目,如果两个项目具有相同的 ID 并插入具有唯一 ID 的项目,我必须增加数据库中项目的数量。

还有一个更新:

使用 MySQL 和 PHP

最佳答案

创建两个临时表,一个是旧数据库数据的副本,另一个包含当前不在数据库中的内容。然后对两张表的bag union进行分组查询。

例如,给定以下初始化点,并假设 MySQL 语法:

create temporary table a (name varchar(255), quantity int);
create temporary table b (name varchar(255), quantity int);
insert into a values ('fork', 1), ('spoon', 2);
insert into b values ('fork', 2), ('knife', 1);

然后您只需运行以下查询即可获得所需的结果。

select name, sum(quantity) AS quantity 
  from ((select * from a) union all (select * from b)) c
  group by c.name;

这会给你结果:

 +-------+----------+
 | name  | quantity |
 +-------+----------+
 | fork  |        3 | 
 | knife |        1 | 
 | spoon |        2 | 
 +-------+----------+

如果要将结果存储回原始数据表,只需在创建两个临时表后从原始表中删除,然后在整个 SELECT 语句前加上 INSERT INTO original_table SELECT ...

关于php - 如何合并到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1195855/

相关文章:

php - SilverStripe 硬编码权限设置 EDIT_SITECONFIG

php - 使用 near order by id desc limit 1 的正确语法

mysql - 为派生表选择数据时出现未知列错误

mysql - 如何搜索作为 MySQL 中值的子字符串的行?

PHP + FFMPEG + S3。直接在 S3 存储桶之间转码视频

mysql - 在 Nestjs 中注入(inject) Tree Typeorm 存储库

mysql - 需要 MySQL 查询来提供更具可读性的结果

ruby-on-rails - 在查询中使用 'nil' 和 `group` 时,哈希值为 `count`

mysql - 一张或两张表 : that is the quest*on

php - 将 HTML 的 deleteRow() 与 PHP 生成的表相关联