MYSQL表有两个不同的名称

时间:2015-01-03 02:49:41

标签: php mysql moodle zen-cart

我正在整合两个系统,moodle和zen-cart。每个系统都有自己的用于存储用户数据的表。我需要两个系统为客户访问同一个表。 Moodle有一个名为mdl_users的表。 Zen-cart有一个名为customers的表。这些表包含类似的数据,但具有不同的字段名称:

mdl_users fields:
id, username, password, firstname, lastname, email, etc....

customers fields:
customers_id, customers_nick, customers_password, customers_firstname, customers_lastname, customers_email_address, etc...

每个系统中都有数百个查询指向这些表(以不太好的封装方式)。

有没有办法将一个表指向另一个表,这意味着所有对customers表的调用都将从mdl_users表中提取(指定了字段名称关系)?我不打算重写几百个查询,而是设置一次(或者每次调用数据调用一次)自动执行此操作。

示例结果:

此查询(来自zen-cart系统):

Select customers_password from customers where customers_id = :id

实际上将结果视为已运行:

select password from mdl_user where id = :id

(编辑/添加) mdl_users.id是moodle系统的主键字段。 (唯一,索引,自动编号)。 customers.customers_id与zen-cart系统相同。

任何解决方案都必须在插入和更新时保持主键编号的一致性。

2 个答案:

答案 0 :(得分:0)

您可以使用触发器来执行此操作,搜索sql触发器。这可以从一个表到另一个表进行调用,我的意思是你可以编程触发器以接收Moodle查询并生成zen-cart表的查询。

答案 1 :(得分:0)

"主人"系统?用户是从Zen Cart和Moodle添加的,还是仅从一个(或来自不同的来源)添加?

我认为没有办法只使用sql,尽管如前所述,视图可能是部分解决方案。我不知道你怎么能确定"插入"如果只是因为你可以在一个系统中拥有但在另一个系统中没有的数据,那就应该按照他们的意愿工作。

Moodle提供了一些方法,可以使用外部系统来同步用户:"外部数据库身份验证"是我能想到的第一个,但在这种情况下,我可能会将它(auth / db)分叉,以制作一个新的插件,它将使用Moodle的新/更新实际更新Zen Cart的数据库用户(如果可以在Moodle中添加用户)。

我不太了解Zen Cart在这一方面提出的建议(虽然似乎没有任何"用户/ auth插件")但是它值得调查。