2012-05-18 76 views
0

我有2個表。在table_1我有不同的任務,每天更新。在table_2我有工人名單。我需要自動將1個工作人員(table_2)隨機分配給1個任務(table_1),以便每個工作人員的任務數量大致相同。使用循環(mysql,php)在表中插入記錄列表

我試過使用rand()方法,它隨機分配,但不是同等分配,我的意思是一個工人可以有比另一個更多的任務。然後我試圖使用count()方法,但無法連接他們...我是新的PHP和MySQL :(

我做了這樣的事情,但只在mysql中,但它只有一次,因爲(不)功能。

insert into table_1(worker) 
    select col_1 from table_2 
    where col_1 not in (select worker from table_1) 
    order by col_1 rand() 
    limit 0,1; 

感謝所有幫助:)

+0

我想你想隨機化任務列表的順序,然後均勻地遞出它們。 –

回答

0

我有2個解決方案給你。第一種方法比較簡單,但前提是您可以修改table_2,爲當前分配的任務數添加一個字段。這將是一個計數器,您將初始化爲0,然後在您每次分配任務時遞增。如果你可以修改你的表,這將選擇具有最少的任務分配給工人:

select worker_id, MIN(tasks_assigned) 
FROM table_2 
GROUP BY worker_id 

這是一個循環分配器,但它是不是所有的隨機的。我認爲公平的任務更重要。如果你不能改變你的桌子,同樣的解決方案是更加凌亂:

CREATE TEMPORARY TABLE task_list 
(worker_id INT, 
    tasks_assigned INT) 

SELECT INTO task_list 
    SELECT worker_id, count(worker_id) AS tasks_assigned 
    FROM table_1 
    GROUP BY worker_id 

SELECT INTO task_list 
    SELECT worker_id, 0 
    FROM table_2 
    WHERE worker_id NOT IN (SELECT worker_id FROM task_list) 

SELECT worker_id MIN(tasks_assigned) 
FROM task_list 
GROUP BY worker_id 

顯然這不是整個解決方案。但是這會給你一個分配任務數最少的worker_id。你將不得不使用這個ID來更新你的任務表(table_1)

0

要完成的任務的隨機分配還是先隨機的任務,然後通過簡單地通過列表迭代交給他們去工人工作者陣列並隨時隨地附加任務。這是我的意思。顯然,我沒有你的代碼的完整細節,但我希望它有幫助。

// assuming you already have a list of tasks and workers fetched from the database 
// and flattened into simple integer indexed arrays. I'll call them $workers 
// and $tasks 

// create an array of tasks per worker 
$worker_tasks = array(); 

// randomize the tasks 
shuffle($tasks); // built in php function 
while(!empty($tasks)){ 
    foreach($workers as $worker){ 
     if(empty($tasks)) break; 

     // add a new task under the worker 
     $worker_tasks[$worker][] = array_pop($tasks); 
    } 
} 

// insert the array of worker_tasks into w/e table you want. 
// high five everyone 
+1

將爲每個工作人員分配一個任務,並將剩餘任務保留爲未分配狀態。從我從原來的問題中瞭解到,我認爲最好做一個while(!empty($ tasks)){workers [i] [] = array_pop($ tasks); $ i =($ i + 1)%len($ workers);}'這將分配任務給每個工作者,不分配任何任務。 – Toote

+0

@Toote +1你是對的。我沒有想太多,錯過了一個明顯的錯誤。 – EmmanuelG