这不一定能回答你的问题,但从长远来看可能会。
您的数据库方案似乎有缺陷。它肯定没有标准化。我会在它成为一个大问题之前解决这个问题,因为您已经注意到它很难找到某些营业时间。这是一个可能更适合的方案草案。
TABLE: locations
id INT AUTO_INCREMENT PRIMARY KEY
name VARCHAR(50)
TABLE: location_hours
id INT AUTO_INCREMENT PRIMARY KEY
location_id INT - Foreign Key references locations table
day CHAR(3) - (examples: mon, tue, wed, thu, fri, sat, sun)
hours VARCHAR(4) - (could also be int)
然后要获取今天的日期,这可以在 MySQL 中使用 DATE_FORMAT %a 完成,示例查询:
SELECT locations.name, location_hours.hours
FROM locations
JOIN location_hours ON locations.id = location_hours.location_id
WHERE location_hours.day = DATE_FORMAT(NOW(), '%a')
AND location.name = 'Someway Business'
ORDER BY location_hours.hour
您应该不需要打开/关闭,因为ORDER BY 知道0900 < 1430 因为它是VARCHAR(尽管INT 也应该知道如何对其进行排序),但您的代码在添加业务时需要更新此记录,或者您需要另一个字段 active 来表示是否应在查询中使用该行。请记住使用 24 小时制。这又是一个模型,我只是在现场创建了它,所以它可能需要一些改进,但这会比像你现在的代码那样做一个 hack 更好。
更新
解决有关查找是否打开或关闭的评论:
只需使用PHP的date函数并调用date('Hi')这将得出24小时制的当前时间,然后你只需做一个简单的if语句看看它是否在它之间,如果是,它被打开。
IE:
$sql = "SELECT locations.name, location_hours.hours
FROM locations
JOIN location_hours ON locations.id = location_hours.location_id
WHERE location_hours.day = DATE_FORMAT(NOW(), '%a')
AND location.name = 'Someway Business'
ORDER BY location_hours.hour";
$result = mysql_query($sql) or trigger_error("SQL Failed with Error: " . mysql_error());
$times = array();
while ($row = mysql_fetch_assoc($result)) {
if (empty($times['open'])) {
$times['open'] = $row['hours'];
}else {
$times['closed'] = $row['hours'];
}
}
$currentTime = date('Hi');
if ($times['open'] <= $currentTime
&& $times['closed'] > $currentTime) {
echo "Open";
}else {
echo "Closed";
}
鉴于我的逻辑是正确的。同样,这只是伪代码的使用示例。鉴于我只是当场写的。以上假设您一次只查询一项业务。