【问题标题】:MYSQL table with two different namesMYSQL 表有两个不同的名字
【发布时间】:2015-03-01 07:43:39
【问题描述】:

我正在集成两个系统,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...

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

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

希望例如结果:

此查询(来自 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 系统相同。

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

【问题讨论】:

  • 我想你可以设置一个视图。视图是一个虚拟表。您可以创建一个指向客户的名为“mdl_user”的视图。阅读此code.tutsplus.com/articles/…

标签: php mysql moodle zen-cart


【解决方案1】:

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

【讨论】:

  • 使用视图怎么样?
  • 我认为你不能在SELECT 上触发。每当更新另一个表时,您都可以使用触发器来更新另一个表。
【解决方案2】:

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

我认为没有办法只使用 sql 来做到这一点,尽管如前所述,视图可能是部分解决方案。我看不出您如何确保“插入”按应有的方式工作,即使只是因为您可以在一个系统中拥有数据但在另一个系统中没有。

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

我对 Zen Cart 的了解不够,无法在这方面提出建议(尽管似乎没有任何“用户/身份验证插件”),但值得研究。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    相关资源
    最近更新 更多