我正在建立餐厅服务,目前我不知道如何展示像谷歌商业这样开放的日常餐厅。
我有桌面设计
+-----+----------+------+----------+----------+
| ref | id_resto | day | open | close |
+-----+----------+------+----------+----------+
| 2 | 5 | 1 | 13:00:00 | 21:00:00 |
| 5 | 5 | 2 | 13:00:00 | 21:00:00 |
| 7 | 5 | 3 | 13:00:00 | 21:00:00 |
| 9 | 5 | 4 | 13:00:00 | 21:00:00 |
| 10 | 5 | 6 | 13:00:00 | 22:00:00 |
| 11 | 5 | 7 | 14:00:00 | 21:00:00 |
+-----+----------+------+----------+----------+
第7天=星期日,1 =星期一,2 =星期二,3 =星期三和soo
根据我的表格,它应该显示
Monday-Thursday 13:00 - 21:00
Saturday 13:00 - 22:00
Sunday 14:00 - 21:00
我尝试了一些算法,但注意到了--_- 任何的想法? 感谢
答案 0 :(得分:0)
对表结构进行少量更改后,实现起来应该很简单。
以下是我创建表格的代码:
CREATE TABLE `daytype` (
`id` int(11) NOT NULL,
`description` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `daytype` VALUES (1,'Monday - Thursday'),(2,'Saturday'),(3,'Sunday');
CREATE TABLE `hours` (
`ref` int(11) NOT NULL,
`id_resto` int(11) DEFAULT NULL,
`id_daytypes` int(11) DEFAULT NULL,
`open` char(5) DEFAULT NULL,
`close` char(5) DEFAULT NULL,
PRIMARY KEY (`ref`)
);
INSERT INTO `hours` VALUES (2,5,1,'13:00','21:00'),(5,5,2,'13:00','21:00'),(7,5,3,'14:00','21:00');
然后,您可以通过简单的连接轻松获得所需的数据:
SELECT d.description, CONCAT(open, ' - ', close) as hours FROM test.hours AS h INNER JOIN daytype AS d ON (d.id = h.id_daytypes);
输出:
如果需要,此结构还有一个额外的好处,即允许您为每个餐厅设置不同的休息时间和不同的显示。例如,如果一家餐馆在星期一有不同的小时数,您可以在星期一和星期二到星期四的日式表中添加一个条目。
总的来说,这应该可以节省一些空间,因为您不需要为每个相同的日子输入重复信息。
希望这有助于您开始使用。
更新:根据请求,这是一个如何检查今天是否有东西打开的例子。
你可以有一个php函数,它返回当天所有有效日型的逗号分隔列表。像这样:
<?php
/*
1 Monday - Thursday
2 Saturday
3 Sunday
4 Friday
5 Monday
*/
function getDayType()
{
$dayOfWeek = date('l');
switch($dayOfWeek)
{
case "Monday":
return "1, 5"
case "Tuesday":
case "Wednesday":
case "Thursday":
return "1";
case "Friday":
return "4":
case "Saturday":
return "2";
case "Sunday":
return "3"
}
}
然后很容易确定今天开放的商店。
例如,像这个将返回所有开放餐厅的查询。
SELECT
h.id_resto
FROM
test.hours AS h
INNER JOIN
daytype AS d ON (d.id = h.id_daytypes)
WHERE
id_daytypes IN (1 , 5)
AND (
(HOUR(NOW()) > HOUR(open) AND HOUR(NOW()) < HOUR(close))
OR
(HOUR(NOW()) = HOUR(open) AND MINUTE(NOW()) >= MINUTE(open))
OR
(HOUR(NOW()) = HOUR(close) AND MINUTE(NOW()) < MINUTE(close))
);