PHP获取数据库中不存在的可用值

时间:2016-06-21 07:10:41

标签: php mysql

我想获得预约网站的可用时间。我的mySQL表看起来像这样(带例子):​​

id(AI,PK),
date(2016-06-21),
start_time(14:00:00),
end_time(14:30:00),
working(20:00:00),
provider(aaa).

我想回应start_timeend_time之间的可用时间。我通过以下方式实现了这一目标:

$sql = "SELECT * FROM `appo` WHERE date = '2016-06-17'";
$result_set = mysql_query($sql);
while($row = mysql_fetch_array($result_set)) {
    for($echodate = 11; $echodate.':00:00' < $row['working']; $echodate++) {
        if($row['start_time'] > $echodate.':00:00' && $row['end_time'] > $echodate.':30:00' || $row['start_time'] < $echodate.':00:00' && $row['end_time'] < $echodate.':30:00') {
            echo $echodate.':00<br>';
            echo $echodate.':15<br>';
            echo $echodate.':30<br>';
            echo $echodate.':45<br>';
        }
    }
    echo '<br>';
    }
}

这很棒!但我的问题是:如果我在数据库上有两个或更多注册表,它会回显不同行的时间,如下所示:

假设我们当天有两个约会。一个在14:00,结束于14:30,一个在16:00结束,在16:30。

我的脚本会回应这个:

11:00
11:15
11:30
11:45
12:00
12:15
12:30
12:45
13:00
13:15
13:30
13:45
15:00
15:15
15:30
15:45
16:00
16:15
16:30
16:45
17:00
17:15
17:30
17:45
18:00
18:15
18:30
18:45
19:00
19:15
19:30
19:45

11:00
11:15
11:30
11:45
12:00
12:15
12:30
12:45
13:00
13:15
13:30
13:45
14:00
14:15
14:30
14:45
15:00
15:15
15:30
15:45
17:00
17:15
17:30
17:45
18:00
18:15
18:30
18:45
19:00
19:15
19:30
19:45

现在,这是问题所在。我想总结它们并只显示一列。我对SQL查询不太满意。如果有办法(PHP或SQL)这样做我会很高兴听到它!

非常感谢您的时间。

1 个答案:

答案 0 :(得分:1)

不确定如何直接处理数据库查询,因为您有多个条目。但是您可以使用循环收集数组中的所有条目,然后检查另一个循环中的所有条目,就像这样,不是吗?也许不是紧固方式,而是解决方案。

$sql = "SELECT * FROM `appo` WHERE date = '2016-06-17'";
$result_set = mysql_query($sql);

        $working = null;
        $blockedEntries = array();

while($row = mysql_fetch_array($result_set)) {
                            $working = $row['working'];
                            array_push($blockedEntries, array('start'=>$row['start_time'],'end'=>$row['end_time']));
}

        for($echodate = 11; $echodate.':00:00' < $working; $echodate++) {
            $entryFound = false;
            foreach($blockedEntries as $entry) {
                if(!($entry['start'] > $echodate.':00:00' && $entry['end'] > $echodate.':30:00' || $entry['start'] < $echodate.':00:00' && $entry['end'] < $echodate.':30:00')) {
                            $entryFound = true;
                            break;
                }
            }
            if($entryFound == false) {
                echo $echodate.':00<br>';
                echo $echodate.':15<br>';
                echo $echodate.':30<br>';
                echo $echodate.':45<br>';
            }
        }

此代码未经过测试,但我认为,很明显,我想要实现的目标。 条目working可以有所不同吗?