我可能会从错误的角度来解决问题,所以如果我的技术不对,请纠正我。
我正在使用php在网站上创建访客用户。当有人访问网站时,会自动创建访客用户。但如果该人登录到“普通”帐户(非访客),那么该访客帐户中所做的任何操作都将转移到新帐户。
例如,某人在未经过身份验证的情况下访问网站,从购物车中的商店添加产品然后登录。我需要将购物车商品从旧用户(访客)转移到新用户。
但是,查找链接到来宾用户帐户的每个表中的每个项目然后全部更改它将花费太多时间(并且可能太耗费资源)。正确?
但我有限制!好极了!如果我更新来宾用户ID,则所有约束都会更改。极好! 但是,如果我需要将它们分配给另一个用户ID呢?我该怎么做?
非常感谢任何帮助。
答案 0 :(得分:2)
我正在使用会话数组来管理它,以前我是通过数据库表进行的,但它太繁琐了。
当用户将任何产品添加到购物车时,如果他已登录,则插入订单表,如果没有,则添加会话数组。现在,当访客登录系统然后检查会话数组,如果它不为null,则在用户订单表中添加所有条目。
答案 1 :(得分:0)
您不能完全按照您的建议行事,因为用户行(对于已登录的用户)可能已经存在。唯一的选择是遍历每个表并在那里更新UserID,就像你建议的那样。这种可行性取决于他们作为访客用户可以做什么。如果它只有一个或两个表,就这样做。
但是,每个问题总能通过另一层抽象来解决,对吧?在真实用户表和其他所有表之间放置另一个表(我将其称为“伪表”)。将其他所有内容链接到此新表,并使用“psuedousers”链接到users表。当guest用户登录时,只需更改pseudousers表中的UserID即可。
我的意思是:
+---------+ +-----------+ +-------+ | Users |----|Pseudousers|----| Carts | +---------+ +-----------+ +-------+ | | +-------+ |------------| ... | +-------+
创建访客用户时,在Users和Pseudousers中创建一个新行。当他们登录时,更新Pseudousers中的UserID以指向该用户,然后您可以安全地删除Users中的访客用户行(它已不再使用)。
希望有人能提出一个比“Pseudousers”更好的名字。