【发布时间】:2016-04-01 06:41:05
【问题描述】:
目的
每次操作员手动将客户添加到程序中时,他/她也会为客户分配一个区域。
有很多用户,每个用户都分配了一个或多个区域。
一旦操作员输入客户并为其分配区域,则应为该客户分配一个用户,但并不总是同一个用户,每次都必须是不同的用户(基于 area_customer 表),并且这必须依次为 (1,2,3,1,2,3,1,2...)。
因此,如果将 3 个用户分配到一个区域,则创建的客户首先分配给第一个用户,然后输入一个新客户并分配给第二个用户,输入第三个客户并分配给第三个用户用户。至此,一切重新开始。如果创建了第四个客户,则将第一个用户分配给此用户,依此类推。
详情
我有 4 个 MySQL 表:
- 用户
- 地区
- Area_Users
- 客户
Users 表有一个唯一的 id user_id 和每个用户的其他字段。
Areas 表有一个唯一的 id area_id 和一个名称字段。
Area_Users 表只有area_id 和user_id,这是分配区域的地方,因此每个用户都为自己分配了一个或多个区域。
Customer 表有一个唯一的 id customer_id,有一个 area_id(与 Areas 表相关)和一个 user_assigned_id(与 Users 表相关)
我需要完成什么:
每次将客户添加到程序中时,负责人都会手动插入该客户的所有数据,包括客户被分配到的区域。
此时在 MySQL 表 Customer 中插入了一行,但应该以编程方式(而不是由人手动)添加 user_assigned_id。
需要从Areas 表中计算出将哪个user_id 放入user_assigned_id 的选择。每次轮流应该是不同的人。
这是Areas 表:
| area_id | name |
-------------------------
| 1 | Z1 |
| 2 | Z2 |
假设这是Area_Users 表:
| area_id | user_id |
-------------------------
| 1 | 4 |
| 1 | 6 |
| 2 | 1 |
| 2 | 2 |
| 2 | 3 |
| 2 | 5 |
| 2 | 6 |
因此,区域 #1 分配给用户 4 和 6,而区域 #2 分配给 1、2、3、5 和 6。(注意:用户 6 分配了 2 个区域)
此时,此人为区域#2 创建了一条记录,这必须分配给用户 1,将创建的下一条记录将转到用户 #2,然后是 #3,然后是 #5,然后是 #6。比 #1 还要好。
对于区域 #1 也是如此,首先到达用户 #4,然后是 #6,然后是 #4,然后是 #6,依此类推......
我的想法是先找到Area数据:
//Codeigniter
$areas_data = $this->db->get_where('areas', ['area_id' => 1]);
然后找出这些区域有多少用户:
$tot_users_area = $areas_data->num_rows();
然后我可以遍历它们,但我怎么知道最后一个任务是什么?而且,对于区域 #1,在用户 #4 之后来到 #6(或者可能是 #124),那么我该如何进入下一个?
【问题讨论】:
-
"此时此人为区域 #2 创建了一条记录,这必须分配给用户 1..."。" 这个“分配”是否意味着“此三元组的记录 (customer_id , area_id, user_assigned_id) 是在 Customers 表中创建的?Customers 表中的 customer_id 是否自动递增?如果不是,该值来自哪里?如果等于 user_id,为什么该字段是必需的(或为什么是user_assigned_id 字段是必需的)?
-
"Areas table has a unique id area_id"..实际上你的area表没有uniqe id..users和area之间是多对多的关系..这就是为什么你正在挣扎..当您的应用程序过去需要新功能时,这种数据库设计可能会给您的应用程序带来问题..我还担心您是否需要客户表..客户和用户之间有什么区别?
-
也不要忘记三个原则..KISS, YAGNI & DRY..
-
很抱歉,我完全忘记写一张桌子了……看看我的编辑。
标签: php mysql arrays codeigniter