免责声明:仍然是初学者。
我正在制作一个小脚本来显示目前应该轮班的人员,按角色过滤。这些班次确实会持续到午夜。截至目前,时间和角色是硬编码的,但我打算允许用户稍后指定两者(因此我不使用 NOW() 等)。
所以给定下面的数据,假设是周一下午 4:30,我想知道什么水果在预定的时间,当这个脚本执行时,它会回显如下:
Apple
Banana
然而,当下面的代码在下表上执行时,它几乎总是选择整个表。我确定查询本身存在问题,但为了彻底,我将其余部分包括在内。我已经测试了只选择日期和角色本身,它工作正常,但是它选择时间的方式错误地评估为真。我会很感激任何建议。
这是我的表的示例:
+----------+-------------+----------+----------+-------------+
| Name | Days | Start | End | Role |
+----------+-------------+----------+----------+-------------+
| Apple | Sun,Mon,Tue | 15:30:00 | 20:00:00 | Fruit |
| Banana | Mon,Tue,Wed | 16:00:00 | 20:30:00 | Fruit |
| Cheese | Mon,Tue,Wed | 08:30:00 | 10:30:00 | Dairy |
| Carrot | Fri,Sat,Sun | 22:00:00 | 07:00:00 | Vegetable |
+----------+-------------+----------+----------+-------------+
这是我的代码,没有遗漏:
<?php
date_default_timezone_set('Etc/GMT+6'); // Set default time zone
$time = date("H:i:s"); // Time with seconds in a 24-hour, leading zero format: i.e. 07:00:00 or 15:30:00
$today = date("D"); // Today, in a three-letter format: i.e. Mon, Tue
$role = "Fruit";
$username="example-username";
$password="example-password";
$database="example-database";
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");
$query="SELECT *
FROM work
WHERE `days` LIKE '%$today%' AND
`role` LIKE '%$role%' AND
(start > end AND ('$time' < end OR '$time' > start)) OR
('$time' BETWEEN start AND end)";
$result=mysql_query($query);
$num=mysql_numrows($result);
mysql_close();
$i=0;
while ($i < $num) {
$victim=mysql_result($result,$i,"name");
echo "<li>$victim</li>";
$i++;
}
?>