我想获得预约网站的可用时间。我的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_time
和end_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)这样做我会很高兴听到它!
非常感谢您的时间。
答案 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
可以有所不同吗?