我有2个数据库。一个是properties
,另一个是dates
。在dates
我已将land_id和日期(以YYYYMMDD格式)相关联,这意味着日期不可用。
我需要制定一个查询,用户可以指定开始日期和结束日期,然后选择可用日期的属性(不在date
数据库中)。航空公司和酒店网站如何做这种逻辑?我正在考虑采用日期范围并在中间选择所有日期并进行查询,其中日期不匹配并按结果数量排序,但我可以看到这很容易变成强烈的查询。
CREATE TABLE IF NOT EXISTS `dates` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`land_id` int(11) NOT NULL,
`date` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=44 ;
--
-- Dumping data for table `dates`
--
INSERT INTO `dates` (`id`, `land_id`, `date`) VALUES
(43, 1, '20100526'),
(39, 1, '20100522'),
(40, 1, '20100523'),
(41, 1, '20100521'),
(42, 1, '20100525');
答案 0 :(得分:2)
将日期设为VARCHAR
会使编写查询变得更加困难。我建议
将日期保存为DATE
并使用以下查询。
这应该有所帮助:
SELECT * FROM dates WHERE date NOT BETWEEN '<start_date>' AND '<end_date>'
选择不在给定范围之间的日期。
我在MySQL 5.1. reference中找到了一个解决方案,以便与VARCHAR
一起使用:
SELECT STR_TO_DATE(date,'%Y%m%d') as real_date
FROM dates WHERE real_date NOT BETWEEN '<start_date>' AND '<end_date>'
或者
SELECT DATE(date) as real_date
FROM dates WHERE real_date NOT BETWEEN '<start_date>' AND '<end_date>'
btw:<start_date>
和<end_date>
是占位符。在那里插入具体日期(格式为YYYY-MM-DD)。