2014-02-05 196 views
1

我正在寫php腳本檢查並分配可用的空閒插槽來保留某臺機器。該表如下所示:保留沒有任何時間重疊

machine  start_time duration(mins) 
     1    11:00  30 
     1    12:00  40 
     1    13:00  30 
     1    14:00  40 
     2    11:00  10 
     2    12:10  30 
     2    13:00  10 

當用戶給出開始時間時,系統應該自動分配機器和用戶可以使用的最大可能持續時間。在同一臺機器上沒有部分或全部重疊。

這裏是我試過的腳本的一部分:

$time = $_POST['starttime']; 
    $duration = $_POST['duration']; 

    $query1 = "SELECT machine_id FROM machinetable"; 
    $res1 = mysql_query($query1$query1,$conn); 

    while($row1 = mysql_fetch_array($res1)) { 
     $y = $row1['machine_id']; 
     $qry = "SELECT * FROM tableabove where machine_id = '$y' Order By start_time DESC"; 

     $result = mysql_query($qry,$conn); 
     while($row = mysql_fetch_array($result)) { 
     // WHAT SHALL I ADD HERE.....JUST SOME HINT OR ANOTHER MEANS THAT HELPS 
     } 
    } 
+0

請提供一些例子來闡明你的規則是什麼。 –

+0

1.參見JOIN。 2.例如,參見1. – Strawberry

+0

例如,如果用戶想要使用從11:40開始的機器......系統應該給他機器兩個,因爲用戶可以使用的持續時間是最長的(30分鐘),而當使用20分鐘時它的機器1.多數民衆贊成我想要的 – user2677682

回答

0

這是你在找什麼?

select machine_id, duration 
from table t 
where starttime = USERSTARTTIME 
order by duration desc 
limit 1; 

這將返回機器和持續時間。您的PHP代碼可以執行「預訂」。

編輯:

試試這個:

select machine_id, duration - timediff(USERSTARTTIME, starttime) as durationForUser 
from table t 
where timediff(USERSTARTTIME, starttime) between 0 and duration 
order by duration - timediff(USERSTARTTIME, starttime) desc 
limit 1; 
+0

不,例如,如果用戶想要使用從11:40開始的機器......系統應該給他機器兩個,因爲持續時間用戶可以使用的是最大值(30分鐘),而機器的最大值爲20分鐘。這就是我想要的 – user2677682