php - 在 php/mysql 中跟踪时间冲突的正确算法是什么?

标签 php mysql algorithm datetime time

我正在处理一个时间安排项目,我可以按时间安排 Material ,我真的很困惑如何在一个时间范围内跟踪时间冲突。我使用了许多(我认为)算法,但仍然没有运气。我的大脑已经饱和了,这就是为什么我在这里询问任何可以帮助我的人。

所以我的数据库中有这些数据:

    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    
    ---------------------------------------------------------- 

我使用此数据来检查特定 Material 在特定时间的可用性。因此,如果 start_timeend_time 的值等于介于 数据库中的那些时间将不可用。我尝试了很多查询,但在很多情况下都不起作用。
以下是我迄今为止尝试过的一些查询。

   $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 代码注意:我正在使用 codeigniter:

   $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;

所以任何知道某种算法的人都可以追踪时间冲突吗?这样我就可以在我的数据库中检索那些可用的 Material ?谢谢!

最佳答案

如果您想查看某个项目是否在某个日期和特定时间被使用,下面的方法应该可以帮到您:

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

关于php - 在 php/mysql 中跟踪时间冲突的正确算法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18556228/

相关文章:

php - 同一行上的 CSS/DIV 文本相反对齐

php - 检查多个值是全部为假还是全部为真

php - 多行的总和并使用 Codeigniter 插入另一列不起作用

mysql - 你如何解决这个错误 : MySQL ODBC Access denied for user 'ODBC' @'localhost' ?

algorithm - 找到分数在费里序列中的位置

javascript - 欧芹远程验证

mysql - 比较并删除特定表中的行

php - 操作方法 : Ranking Search Results

algorithm - 如何从数学上推导此递归树的叶子高度和数量

javascript - 如何消除按位循环并将字节作为一个整体处理?