我找不到解决这个问题的最佳方法,
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/