[英]Sync two tables from two different databases with different structure MySql
我有两个 php 应用程序处理相同的产品,一个是购物,另一个是销售点,但每个都使用自己的数据库。
由于它们都在处理相同的产品,我想通过在 2 个数据库中同步产品表来缩短输入产品数据的时间,因此当我在商店中添加新产品时,它会显示在 POS 中。
我搜索了很多,但所有结果都在谈论相同的表结构。
不幸的是,在我的情况下,结构不同。
店铺产品表是这样的:
id name current_stock category_id brand_id
POS产品表是这样的:
id name code category_id brand_id
另一个问题是 pos db 中的代码列应该包含一个唯一的数字,我使用这个命令来生成它:
`code` = FLOOR(1000 + RAND() * 89999999)
我需要在同步过程中生成它。
我看到这篇文章和许多其他帖子如何在 Mysql 中仅将不同的值从一个表复制到另一个表? 这是关于相同的表
编辑:起初我会添加所有产品,但之后我只需要添加新产品。 这就是我所说的同步
我假设这两个表都在同一个 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 产品表中的所有数据,然后将其插入到 POS 产品表中。 根据您的架构更改表和数据库名称。
但正如@stickybit 所建议的那样。 如果可能的话,我还建议您将两个表移动到同一个数据库中。
此外,您可以实现一个触发器来自动执行此操作。
编辑:添加尚未在表中的记录。 您只需要 select 商店产品表中的那些记录。
使用子查询获取设置差异,
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;
谢谢 !
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.