2013-09-01 31 views
0

我正在與時間安排項目,我可以按時間安排材料,我真的很困惑我如何追蹤時間範圍內的時間衝突。我與很多(我認爲)算法合作,但仍然沒有運氣。我的大腦飽和,這就是爲什麼我問在這裏誰能幫助我的人。
在php/mysql中跟蹤時間衝突的正確算法是什麼?

所以我在我的數據庫中的這些數據:

CREATE TABLE schedule_dummy 
    (
    `materialID` int, 
    `date_reserve` date, 
    `start_time` time, 
    `end_time` time 
    ); 

    ------DB Table schedule_dummy -------- 
    material |  date  | start_time | end_time 
    ---------------------------------------------------------- 
    7  | 2013-08-01 | 13:00:00  | 14:00:00  
    10  | 2013-09-01 | 13:30:00  | 14:00:00  
    ---------------------------------------------------------- 

我用這個數據來檢查在特定時間特定材料的可用性。所以如果start_timeend_time的值是equal toin between那些時間在數據庫中的材料將不可用。我嘗試了這麼多的查詢,但不適用於很多情況。
以下是我迄今嘗試的一些查詢。

$sql = "SELECT materialID 
      FROM schedule_dummy WHERE (date_reserve = ?) 
      AND (? BETWEEN start_time AND end_time 
      OR ? BETWEEN start_time AND end_time)"; 

而且

//I've tried this query but in some cases doesn't work dunno if I'm missing something. 
    $sql = "SELECT * FROM schedule_dummy 
     WHERE date_reserve = ? 
     AND start_time >=? AND start_time <=?"; 

,這裏是我的PHP代碼注:我使用的是笨:

$start = date("H:i:s", strtotime($this->input->post('start'))); 
    $end = date("H:i:s", strtotime($this->input->post('end'))); 
    $date_reserve = $this->input->post('date_reserve'); 
    $id = $this->input->post('id'); 


    //$sql = "SELECT materialID FROM schedule_dummy WHERE (date_reserve = ?) AND (? BETWEEN start_time AND end_time OR ? BETWEEN start_time AND end_time)"; 
    $sql = "SELECT * FROM schedule_dummy WHERE date_reserve = ? AND start_time >=? AND end_time <=?"; 
    $query = $this->db->query($sql,array($date_reserve,$start,$end)); 

    $ids = array(); 
    if($query->num_rows() > 0){ 
     foreach($query->result() as $rows){ 
      $ids[] = $rows->materialID; 
     } 
    } 

    $data = array(); 
    $n = count($ids); 

    $idz = array(); 
     if($n > 0){ 
      $q = $this->db->select('*')->where_not_in('id',$ids)->where('cid', $id)->get('materials'); 

      if($q->num_rows() > 0){ 
       foreach($q->result() as $row){ 
        $data[] = $row; 
       } 
      } 

     }else{ 
      $q = $this->db->select('*')->where('cid',$id)->get('materials'); 

      if($q->num_rows() > 0){ 
       foreach($q->result() as $row){ 
        $data[] = $row; 
       } 
      } 

     } 
     return $data; 

那麼任何人都可以,誰知道一些算法來跟蹤時間衝突?這樣我可以檢索我的數據庫中的可用材料?謝謝!

回答

1

如果你想看看是否被上的日期和時間particluar使用的項目,下面應該爲你做的伎倆:

select 
    material 
from 
    schedule_dummy 
where 
    date_reserve=checkDate 
    and start_time <= checkTime 
    and end_time >= checkTime 
+0

我已經試過了老兄它不在一段時間內工作。 – leonardeveloper

+0

好的,現在我們正在某個地方。您正在嘗試的確切時間是什麼?應該與之匹配的數據行是什麼? – Fluffeh

+0

E.g. start_time = 13:30:00 and end_time = 14:00:00 – leonardeveloper

0
$qry = "SELECT * FROM schedule WHERE day='$day' AND starttime>='$starttime' AND endtime<'$endtime'"; 
     $result = mysql_query($qry); 
     if($result) { 
      if(mysql_num_rows($result) > 0) { 
       $errmsg_arr[] = 'The Room or Time Schedule is already exist in the database'; 
       $errflag = true; 
      } 
      @mysql_free_result($result); 
     } 
     else { 
      die("Query failed"); 
     } 


    //If there are input validations, redirect back to the registration form 
    if($errflag) { 
     $_SESSION['ERRMSG_ARR'] = $errmsg_arr; 
     session_write_close(); 
     echo "<script>alert('The Room or Time Schedule is already exist in the database.');history.back();</script>"; 
     exit(); 
    } 
+0

添加一些解釋和答案這個答案如何幫助OP在解決當前問題 –

相關問題