簡體   English   中英

PHP:遍歷數組並將客戶分配給用戶

[英]PHP: iterate through array and assign a customer to a user, in turn

目的

每次操作員手動將客戶添加到程序時,他/她也會為客戶分配一個區域。

用戶很多,每個用戶都分配了一個或多個區域。

一旦操作員輸入了一個客戶並為其分配了一個區域,就應該將一個用戶分配給該客戶,但不總是相同的用戶,每次都必須是一個不同的用戶(基於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_iduser_id ,這是分配區域的位置,因此每個用戶都為其分配了一個或多個區域。

Customer表具有唯一的標識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)之后,我該如何進入下一個區域?

如果我理解正確,並且“客戶”表中的“ customer_id”字段是自動遞增的,則需要像您輸入的那樣在“客戶”表中檢查“最后的分配”。

獲得所有$ areas_data后:

$areas_data = $this->db->get_where('areas', ['area_id' => 1]);

遍歷“客戶”表中的每個對(user_id,區域),然后查看存在的對。 當找到不存在的一對時,添加它:

foreach($areasdata as $key => $areaDatum) {
    $result = $this->db->get_where('customers', array('area_id' => $areaDatum['area_id'], 'user_assigned_id' => $areaDatum['user_id']));
    if(!result) {
        $data = array('area_id' => $areaDatum['area_id'], 'user_assigned_id' = > $areaDatum['user_id']);
        $this->db->insert('customers', $data);
    }
}

這只是數組的簡單演示,而沒有使用codeigniter和數據庫。

<?php
$customers=[1,2,3,4,5,6,7];
$users=[1,2,3,4];
$usercustomers = [];
$userslen=count($users);


foreach($customers as $customer)
{
    if($customer > $userslen){

        $usercustomers = array('user'     => $customer%$userslen,
                               'customer' => $customer);
        var_dump($usercustomers);
        echo "<br>";

    }
    foreach($users as $user)
    {

        if($customer%$user==0 && $customer==$user){

            $usercustomers = array('user'     => $user,
                                   'customer' => $customer);

            var_dump($usercustomers);
            echo "<br>";
         }

    }

}



?>

此時因為沒有用戶和customers..Using的ORM有一個簡單的解決方案..之間的多對一的關系,你可以考慮使用ORM包..(這對於這樣的情況下,提供reusuble解決方案) 的http:// www.krueckeberg.org/notes/relationships.html ..還要搜索關鍵字"on cascade delete""on cascade insert" ..使用ORM和級聯將更加容易。“無需重新發明輪”..

區域和用戶之間存在多對多的關系。更改數據庫設計可能會為您提供幫助,並強烈建議您這樣做。在當前設計中,如果需要獲取所有區域該怎么辦?表區域中沒有主鍵。如果還需要使用日期獲取軌道分配怎么辦?在此解決方案中,您可以將一個日期字段添加到AssignedInto表中並保留軌道分配表等.AssignedInto表提供了用戶和區域之間的關系。

https://en.wikipedia.org/wiki/Many-to-many_(data_model)

http://code.tutsplus.com/articles/sql-for-beginners-part-3-database-relationships--net-8561

在此處輸入圖片說明

ORM軟件包,稱為“教義”。

http://www.doctrine-project.org/

您真正要尋找的是ROUND ROBIN METHOD 分配客戶時,您必須圈出用戶。

你可以做什么

每當您要問客戶時,都必須在臨時表中再插入一個。

該臨時表跟蹤哪個是最后分配的用戶(userid)以及該客戶的區域,當您再次與該客戶聯系時,您將首先查詢該臨時表以檢查最后分配的用戶,並遞增該用戶userid並分配客戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM