更新两个或更多表

时间:2016-07-22 11:13:07

标签: php mysql arrays

我有三张桌子 第一个表是tbl_user

id  u_name  p_list
1   demo1   1,3,
2   demo2   4,3,1,
3   demo3   2,3,
4   demo4   2,5,
 

第二个表是tbl_product

id  product_name
1   example1
2   example2
3   example3
4   example4
5   example5
第三个表是tbl_order_list,它向用户显示订单列表。 tbl看起来像
id  pid  uid
1   1    1,2,
2   4    2,
3   3    1,2,3,
4   5    4,
现在我想要 如果我将更新tbl用户意味着如果我将删除tbl_user的列p_list的pid而不是tbl_user将更新并且tbl_order_list更新

“示例”如果我将从tbl_user中删除id为2的p_list中的3而不是表格

id  u_name  p_list
1   demo1   1,3,
2   demo2   4,1,  //(pid =3 is remove of demo2)
3   demo3   2,3,
4   demo4   2,5,
并且tbl_order_list看起来像是
id  pid  uid
1   1    1,2,
2   4    2,
3   3    1,3, //(uid =2 is remove)
4   5    4,

这个问题的解决方案是什么。我也想要如果我再次在表用户的id = 2的p_list中添加pid = 3而不是像前面的表一样。

QUERY (来自评论)

mysql_query("UPDATE tbl_user SET u_name='$userName',slug='$userSlug',password='$userPassword',email='$use‌​rEmail',role='$userRole',p_list='$userList',status='$userStatus',modified_‌​date='$userDate' WHERE id='$uId'");

帮帮我

1 个答案:

答案 0 :(得分:0)

到目前为止,我没有看到与php有任何真正的相关性,但无论如何。

我会高度建议使用普通表单(请参阅数据库规范化)并对数据进行重复数据删除。 tbl_order_list是一个非常糟糕的表,就像tbl_user一样。 tbl_order_list不应该有一个id字段,uid字段应该只包含一个uid,主键应该是(pid,uid)(所以两个字段都是)。到那时它应该被称为tbl_order。如果你想要一个uid的所有pid列表或pid的所有uid列表 - 在某些时候 - 你可以像这样查询:

SELECT GROUP_CONCAT(uid) 
FROM tbl_order 
WHERE pid=[your pid of interest]
GROUP BY pid

反之亦然(用pid替换uid,用uid替换pid)。如果您想与其余的userdata同时查询它:

SELECT u.*, GROUP_CONCAT(o.pid)
FROM tbl_user u
LEFT JOIN tbl_order o ON (u.id=o.uid)
[WHERE u.id=[your uid of interest]]
GROUP BY u.id

(与tbl_product类似)。

使用mysql> = 5.7时,您可以创建一个视图:

CREATE VIEW tbl_order_list AS SELECT pid, GROUP_CONCAT(uid) FROM tbl_order GROUP BY pid. 

添加或删除订单会导致在tbl_order中删除/插入行。

摘要:创建一个包含uids和pids之间链接的表tbl_order(uid,pid)(每行一个链接)。当您需要链接时,请加入此表。 不要保存"参考"作为字符串字段中以逗号分隔的列表,除非有非常非常好的理由。

如果您的理由非常充分,请考虑在列表的开头和结尾添加逗号(,),这意味着。所以:

id  pid  uid
1   1    ,1,2,
2   4    ,2,
3   3    ,1,2,3,
4   5    ,4,

通过这种方式,您可以安全地搜索,添加和删除条目:

SELECT * FROM tbl_order_list WHERE uid LIKE '%,[uid of interest],%'
UPDATE tbl_order_list SET uid=CONCAT(uid,',',[uid to add]) WHERE id=[order to update]
UPDATE tbl_order_list SET uid=REPLACE(",[uid to remove],",",",uid) WHERE id=[order to update]

(类似于你的tbl_user,如果你在tbl_order列表中通过pid查询,请删除id字段。)

如果您没有添加逗号,可能会在某些时候出现一些问题。

无论如何,我不能强调这一点:规范化你的数据库结构,除非你有充分的理由不(并且绝对肯定,它们确实是很好的理由,因为通常它们不是)