我正在开发一个旧项目,很久以前我决定将开放时间作为文本存储在数据库中。例如:
CREATE TABLE `places` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`place_name` varchar(100) NOT NULL,
`monday` varchar(11) DEFAULT NULL,
`tuesday` varchar(11) DEFAULT NULL,
`wednesday` varchar(11) DEFAULT NULL,
`thursday` varchar(11) DEFAULT NULL,
`friday` varchar(11) DEFAULT NULL,
`saturday` varchar(11) DEFAULT NULL,
`sunday` varchar(11) DEFAULT NULL,
PRIMARY KEY (`id`)
);
到目前为止一切都很好,因为这些数据仅用于提供信息。星期一到星期日列内的值正在被过滤,因此它们必须严格匹配模式:HH:MM-HH:MM,例如“08:00-17:30”,而NULL值表示该地点已关闭在特定的一天。
但是,现在需要按开放时间过滤地点。像“显示现在开放的地方”之类的东西。我可以,我已经准备好了,查询将使用SUBSTR和STR_TO_DATE函数来分割开放时间,但我不确定这是否会破坏我的数据库。我期待大约100'000行,原始表格更“复杂”......)......这只是一个例子。
工作(还)SQL:
SET @currentTime := '16:00:00';
SELECT *
FROM `places`
WHERE `monday` IS NOT NULL
AND STR_TO_DATE(SUBSTR(`monday`, 1, 5), '%H:%i') <= @currentTime
AND STR_TO_DATE(SUBSTR(`monday`, 7, 5), '%H:%i') >= @currentTime
你怎么看?有没有更好的方法来使用现有的DB结构,或者我应该忘记这样的一半措施并立即改变结构?