我有一张桌子users
和一张桌子salesmen
我想将销售人员分配给用户。一个销售人员可以链接到多个用户。
所以我使用列users_salesmen
和user_id
创建了salesmen_id
“链接”表。
我有一个可以链接它们的页面
| Salesemen 1| Salesmen 2 | Salesmen 3 |
-------|------------|-------------|------------|
User 1 | checkbox | checkbox | checkbox |
-------|------------|-------------|------------|
User 2 | checkbox | checkbox | checkbox |
-------|------------|-------------|------------|
User 3 | checkbox | checkbox | checkbox |
-------|------------|-------------|------------|
该复选框位于HTML中:
<input type="checkbox" name="user_id[6][]" value="3" />
值为salesmen_id
如何链接的一个例子:
| Salesemen 1| Salesmen 2 | Salesmen 3 |
-------|------------|-------------|------------|
User 1 | x | | x |
-------|------------|-------------|------------|
User 2 | | x | |
-------|------------|-------------|------------|
User 3 | | x | x |
-------|------------|-------------|------------|
这将导致users_salesmen
salesmen_id | user_id
------------ |------------
1 | 1
2 | 2
2 | 3
3 | 1
3 | 3
所以我的问题是,在我做了一些更改之后如何更新表格 我一直这样做:
users_salesmen
users_salesmen
这是正确的方法,还是有更好的方法来更新数据?
答案 0 :(得分:1)
你说&#34;一个推销员可以链接到多个用户。&#34;。如果这是真的,反之亦然(&#34;一个用户可以链接到多个推销员&#34;),那么以下是一个很好的解决方案。
有一个&#39; salesman_id&#39;您的users表中的列,只需将salesman ID添加到相关用户行。然后,您的销售人员表将只有销售员详细信息及其ID - 用户表将包含分配给他们的销售员的ID。每个销售人员可以分配多个用户。
答案 1 :(得分:1)
我同意@MarcB,你是最好的方法。无论如何,仅仅为了讨论的目的,我可以建议你使用array_diff的另一种方式来获取要添加的内容和要删除的内容:
function array_diff_ORG_NEW(&$org, &$new, $type){
switch($type){
case 'VALUES':
$int = array_values(array_intersect($org, $new)); //C = A ^ B
$org = array_values(array_diff($org, $int)); //A' = A - C
$new= array_values(array_diff($new, $int)); //B' = B - C
break;
case 'KEYS':
$int = array_values(array_intersect_key($org, $new)); //C = A ^ B
$org = array_values(array_diff_key($org, $int)); //A' = A - C
$new= array_values(array_diff_key($new, $int)); //B' = B - C
break;
}
}
这将查看键或值,并将为您提供要添加或删除的所有项目。
答案 2 :(得分:0)
更新复选框列表很痛苦,但最简单/最干净的方法基本上就是你正在做的事情:
start transaction
delete old stored checkbox data
insert all checkboxes from form
commit transaction
否则,您将无法获取旧列表,将其与新列表进行比较,并构建单独的插入/删除查询以删除任何“未选中”框并插入任何“已选中”的列表。
更容易将所有旧东西都插入并插入所有新东西。事务保证最终会得到一致的结果,并在实际提交之前隐藏其他并行代码的删除/插入。
答案 3 :(得分:0)
我认为你的手术是可行的。因为,如果允许在UI中仅更新行(在HTML中),则意味着您一次只能为单个用户更新数据。因此,在那个时候你应该只删除和重新插入该用户的数据,其他应该保持相同。 但是,如果允许您在一次调用中修改多于用户的记录,则必须删除该链接(映射)表的所有记录并重新插入。