Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql外键约束,删除时更新(分配所有链接到另一个)_Php_Mysql_Foreign Key Relationship - Fatal编程技术网

Php Mysql外键约束,删除时更新(分配所有链接到另一个)

Php Mysql外键约束,删除时更新(分配所有链接到另一个),php,mysql,foreign-key-relationship,Php,Mysql,Foreign Key Relationship,我可能从错误的角度来处理这个问题,所以如果我的技术错误,请纠正我 我正在用php在网站上创建来宾用户。当有人访问网站时,会自动创建来宾用户。但是,如果此人登录到“普通”帐户(非来宾),那么此人在来宾帐户中所做的任何事情都将转移到新帐户 例如,有人未经身份验证就访问网站,将商店的产品添加到购物车中,然后登录。我需要将购物车项目从旧用户(来宾)转移到新用户 但是,在每个表中找到链接到来宾用户帐户的每个项目,然后将其全部更改,这将太耗时(可能也太消耗资源)。对吧? 但我有限制!耶!如果我更新来宾用户i

我可能从错误的角度来处理这个问题,所以如果我的技术错误,请纠正我

我正在用php在网站上创建来宾用户。当有人访问网站时,会自动创建来宾用户。但是,如果此人登录到“普通”帐户(非来宾),那么此人在来宾帐户中所做的任何事情都将转移到新帐户

例如,有人未经身份验证就访问网站,将商店的产品添加到购物车中,然后登录。我需要将购物车项目从旧用户(来宾)转移到新用户

但是,在每个表中找到链接到来宾用户帐户的每个项目,然后将其全部更改,这将太耗时(可能也太消耗资源)。对吧?

但我有限制!耶!如果我更新来宾用户id,所有约束都会更改。太棒了但是如果我需要将它们分配给另一个用户id怎么办?我该怎么做?


非常感谢您的帮助。

您不能完全按照您的建议执行操作,因为用户行(对于登录用户)可能已经存在。唯一的选择是遍历每个表并更新那里的UserID,就像您建议的那样。这是否可行取决于他们作为来宾用户可以做什么。如果只有一两张桌子,就这样做

但是,每个问题都可以通过另一层抽象来解决,对吗?将另一个表(我称之为“伪用户”)放在RealUsers表和其他所有表之间。将所有其他内容链接到此新表,并使用“psuedousers”链接到users表。当来宾用户登录时,只需在pseudousers表中更改UserID,您就完成了

我的意思是:

+---------+ +-----------+ +-------+ | Users |----|Pseudousers|----| Carts | +---------+ +-----------+ +-------+ | | +-------+ |------------| ... | +-------+ +---------+ +-----------+ +-------+ |用户|------伪用户|------购物车| +---------+ +-----------+ +-------+ | | +-------+ |------------| ... | +-------+ 创建来宾用户时,将在Users和Pseudousers中创建新行。当他们登录时,更新Pseudousers中的UserID以指向该用户,然后您可以安全地删除Users中的来宾用户行(该行不再使用)


希望有人能想出一个比“伪用户”更好的名字。

我正在使用会话数组来管理它,以前我是通过数据库表来完成的,但它太单调乏味了


当用户将任何产品添加到购物车时,若他已登录,则插入订单表,若未登录,则插入会话数组。现在,当来宾登录到系统时,请检查会话数组,如果该数组不为null,则在用户订单表中添加所有条目。

只需将userID从X user更改为Y,不起作用?一个可能的解决方案是为您的用户使用会话cart@ravz这只会解决购物车的问题,但其余的问题呢?按照lc的建议创建“中间”约束表。效果非常好。尝试了“伪用户”解决方案。很好!谢谢,这听起来像是一项复杂得多的工作。会话很棒,但我喜欢将数据保存在数据库中。更适合这份工作