Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查找打开时间和关闭时间之间的记录_Mysql - Fatal编程技术网

MySQL查找打开时间和关闭时间之间的记录

MySQL查找打开时间和关闭时间之间的记录,mysql,Mysql,我们有多家餐厅在一周中的特定日期开放和关闭。我们有通宵营业的餐馆。例如,餐厅时间是(周一上午10:00-周二上午5:00) 我正在尝试以下SQL查询。但记录返回计数为零 数据库: CREATE TABLE `restaurants_hours` ( `id` int(11) NOT NULL, `shop_id` int(11) unsigned NOT NULL, `day_of_week` varchar(255) NOT NULL, `open_time` time NOT

我们有多家餐厅在一周中的特定日期开放和关闭。我们有通宵营业的餐馆。例如,餐厅时间是
(周一上午10:00-周二上午5:00)

我正在尝试以下SQL查询。但记录返回计数为零

数据库:

CREATE TABLE `restaurants_hours` (
  `id` int(11) NOT NULL,
  `shop_id` int(11) unsigned NOT NULL,
  `day_of_week` varchar(255) NOT NULL,
  `open_time` time NOT NULL,
  `close_time` time NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `restaurants_hours` (`id`, `shop_id`, `day_of_week`, `open_time`, `close_time`)
VALUES
(1, 1, 'sunday', '10:00:00', '05:00:00'),
(2, 1, 'monday', '10:00:00', '05:00:00'),
(3, 1, 'tuesday', '10:00:00', '05:00:00'),
(4, 1, 'wednesday', '10:00:00', '05:00:00'),
(5, 1, 'thursday', '10:00:00', '05:00:00'),
(6, 1, 'friday', '10:00:00', '05:00:00'),
(7, 1, 'saturday', '10:00:00', '05:00:00');
查询

SELECT id, open_time, close_time, day_of_week FROM restaurants_hours WHERE
(((close_time > open_time) AND (FIND_IN_SET('thursday', day_of_week)) 
AND (open_time <= '12:40') AND (close_time >= '12:40') )
OR
((close_time <= open_time) AND (FIND_IN_SET('wednesday', day_of_week)) AND (close_time > '12:40')))
从餐厅选择id、营业时间、营业时间、每周营业日和营业时间
((关闭时间>打开时间)和(在集合中查找(“星期四”,一周中的第二天))
和(开放时间='12:40'))
或
((收盘时间'12:40'))

你能显示出你想要的数据的准确结果吗?@nbk我只想知道哪个记录是匹配的。Mysql查询返回匹配行。你可以检查一下。当我通过夜间时间时,返回行为,但当我通过餐厅白天时间查询时返回计数为零。我建议您添加列
open\u day
close\u day
,并删除
day\u of \u week
。然后,您可以将这些设置为
sunday
10:00:00
-
monday
05:00:00
,这样您的查询就简单多了。目前,您的数据中有一个假设,但在截止日期之前并不明显!=如果关闭时间<开放时间,则为开放日。编辑:看起来您希望每个店铺id每天有一行,对吗(因此每个店铺将有7行或更少的行[如果它们在X天关闭]在这张表中?如果是这样的话,我的建议可能无效。@我只是想在当前日期之间开餐馆。我们有很多餐馆。餐馆在一周内都有开门和关门的时间。例如,
10:00 AM-周一
餐馆在
05:00 AM周二
开门和关门。当我运行query wi时我只想返回的当前时间是餐厅开门或关门。如果您将其视为“开门时段”而不是“开门日”,那么我的建议很有意义,逻辑也更简单。然后您的查询可以变成
SELECT id,open_day,open_time,close_day,close_time FROM restaurants_hours((open_day=3,open_time='16:45:00'))或关闭(第3天以上);
查找截至周三下午4:45的开放餐厅。请参阅一个工作示例。您能显示您希望与该数据完全匹配的结果吗?@nbk我只想知道哪个记录是匹配的。Mysql查询返回匹配行。您可以检查此项。当我通过夜间时间返回行时,但当我通过餐厅日间时间查询时,返回计数为零。我建议您可以添加列
open\u day
close\u day
并删除
day\u of u week
。然后您可以将这些列设置为
sunday
10:00:00
-
monday
05:00:00
,您的查询变得简单多了。现在,您的数据中有一个假设,但不明显的是关闭日期ay!=如果关闭时间<打开时间.编辑:看起来您希望每个店铺id每天有一行,对吗(因此每个店铺将有7行或更少的行[如果他们在X天关闭]在这张表中?如果是这样的话,我的建议可能无效。@我只是想在当前日期之间开餐馆。我们有很多餐馆。餐馆在一周内都有开门和关门的时间。例如,
10:00 AM-周一
餐馆在
05:00 AM周二
开门和关门。当我运行query wi时我只想返回的当前时间是餐厅开门或关门。如果您将其视为“开门时段”而不是“开门日”,那么我的建议很有意义,逻辑也更简单。然后您的查询可以变成
SELECT id,open_day,open_time,close_day,close_time FROM restaurants_hours((open_day=3,open_time='16:45:00'))或关闭_day>3);
以查找周三下午4:45的开放餐厅。有关工作示例,请参阅。