我有两个处理相同产品的 php 应用程序,一个是购物,另一个是销售点,但每个应用程序都使用自己的数据库。
由于他们都处理相同的产品,我想通过同步 2 dbs 中的产品表来缩短输入产品数据所用的时间,因此当我在商店中添加新产品时,它会显示在 POS 中。
我搜索了很多,但所有结果都在讨论相同的表结构。
不幸的是,在我的情况下,结构不同。
店铺产品表是这样的:
id name current_stock category_id brand_id
POS 产品表是这样的:
id name code category_id brand_id
还有一个问题,pos db中的代码列应该包含一个唯一的数字,我使用这个命令来生成它:
`code` = FLOOR(1000 + RAND() * 89999999)
我需要在同步过程中生成它。
我看到了这个和许多其他帖子 how to copy only distinct values from one table to another in Mysql? 这是关于相同的表
编辑: 起初我会添加所有产品,但之后我只需要添加较新的产品。 这就是我所说的同步
答案 0 :(得分:1)
我假设两个表都在同一个 mysql 服务器中,并且您的 mysql 用户帐户具有访问两者的正确权限。
INSERT INTO database_pos.pos_product
SELECT id, name,
FLOOR(1000 + RAND() * 89999999) as code,
category_id, brand_id FROM database_shop.shop_product;
<块引用>
我不建议使用 FLOOR(1000 + RAND() * 89999999)
生成唯一键。
此语句将查询shop product表中的所有数据,然后将其插入到POS product表中。根据您的架构更改表和数据库名称。
但正如@stickybit 所暗示的那样。如果可能,我还建议您将两个表移到同一个数据库中。
此外,您可以实现一个触发器来自动执行此操作。
编辑: 添加不在表中的记录。您只需从商店产品表中选择那些记录。
使用子查询获取集合差异,
INSERT INTO database_pos.pos_product
SELECT id, name,
FLOOR(1000 + RAND() * 89999999) as code,
category_id, brand_id FROM database_shop.shop_product sp
WHERE sp.id NOT IN (SELECT id FROM database_pos.pos_product);
使用外连接获取集差,
INSERT INTO database_pos.pos_product
SELECT sp.id, sp.name,
FLOOR(1000 + RAND() * 89999999) as code,
sp.category_id, sp.brand_id FROM database_shop.shop_product sp
LEFT JOIN database_pos.pos_product pp ON pp.id = sp.id
WHERE pp.id IS NULL;
谢谢!