我不确定我想要做的事情是否可能,但是,如果是的话,我显然不是谷歌搜索,并且会感谢我能得到的任何帮助,即使它只是一个“白痴”的链接引导”。
好的,目前,我有一个150多条记录的数据库表。每条记录包含基本详细信息(名称,位置,联系信息等)和登录凭据(UserID,密码等)。在潜在用户经历成功的面试过程之后,网站管理员(即没有一般公众注册)捕获这些细节。创建记录时,会为用户分配一个6字符“用户名前缀”(例如“UNPREF”),并将其与自动增量用户ID(例如125)一起用作用户名(例如UNPREF125)登录网站。但是,用户名实际上并未存储在数据库中。相反,当用户登录时,登录脚本会拆分提供的用户名,并根据相关字段检查两个块。
除了这个主要用户表之外,还有许多其他表包含附加信息(例如,教育资格,工作历史等),这些表通过UserID链接到用户,按照主表。现在,用户和管理员都可以更新用户的数据,因此,我为记录上次修改记录(modby
)和何时(modon
)的每一行创建了一个字段,以便有任何恶作剧,我可以确定谁最后摆弄,理论上,没有任何“他说/她说”胡说八道,处理那个特定的个人。
现在这里是棘手的一点。我的用户和管理员存储在不同服务器上的不同数据库中(后者超出了我的控制范围),但我最近发现了联邦表的乐趣,它的工作非常出色。一个小怪癖,tho;因为我的用户和管理员存储在不同的数据库中,因为我希望最大化我可以存储在单个数据库中的记录数(每个数据库的大小限制为100mb),公司当前的扩展速率和每个分支都需要两个管理员帐户,用户和管理员最终使用相同的UserID不是不可能的场景。因此,modby
字段存储完整的用户名(即UNPREF125 - 管理员获取自己的唯一用户名前缀,以便区分管理员和用户)
现在,也许是因为我是Federated Tables的新手,但我似乎无法找到一种方法来比较服务器A(即modby
)上的表中的字段和2个单独的字段(联合表中的unprefix
和userid
),从服务器B调用,但我通过在服务器B的表中创建一个额外的字段,即username
来提出解决方法,相反,检查合并的值(即'DBPREF125')和modby
,这样可以正常工作(我确信有一种更简单的方法,但我会将该课程另外保存一段时间)。
现在,这是我的问题。 admin表目前很小(只有26条记录),因此我使用phpMyAdmin手动捕获了用户名,但我宁愿避免为我的users表中的150多条记录手动创建用户名。有什么方法可以让MySQL获取userid
和unprefix
字段的值,将它们连接在一起并将结果存储到同一记录的username
字段中,或者我需要为此转向PHP,如果是这样,我将如何解决这个问题?
我为问题的长度道歉,但我希望这有助于解释为什么Google今天不我的朋友。
非常感谢提前。
答案 0 :(得分:2)
将组合存储在表格中:
UPDATE TableB
SET username = CONCAT(unprefix, userid);
或者你可以在比较时使用它:
SELECT *
FROM TableA a
JOIN TableB b
ON a.modby = CONCAT(b.unprefix, b.userid);