我正在努力为酒店开发预订系统。 在我的搜索表单中,我有两个datepicker(日期出发和到达日期)和目的地。 我有一个日期问题,在我的数据库中我有两个表“价格”和“季节”,可以通过季节的id加入合作。
表格结构:
CREATE TABLE IF NOT EXISTS `prices` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`prix_single` varchar(255) NOT NULL,
`prix_double` varchar(255) NOT NULL,
`prix_triple` varchar(255) NOT NULL,
`idseason` varchar(255) NOT NULL,
`idhotel` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=41 ;
CREATE TABLE IF NOT EXISTS `season` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`begin_date` varchar(255) NOT NULL,
`end_date` varchar(255) NOT NULL,
`idhotel` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
)
例如,对于季节而言,我的周期是 2月1日至2月28日(每人每晚100美元) 4月1日至4月28日(每人120美元)
如果我的客户选择期间[2月26日至3月3日]我如何用SQL计算它? 我试过这个:
SELECT *
FROM season, prices
WHERE season.id=prices.season
and (season.begin_season BETWEEN 2012/02/26 AND 2012/03/03 OR season.fin_season BETWEEN 2012/02/26 AND 2012/03/03)
它对我不起作用,它返回给我空的结果,我在我的数据库中有两个季节
id begin_season end_season idhotel
32 10/07/2012 28/09/2012 52
35 29/09/2012 29/10/2012 52
我该怎么做? 非常感谢!
编辑: 我已经改变了我的表格和我的查询:
CREATE TABLE IF NOT EXISTS `season` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`begin_season` date NOT NULL,
`end_season` date NOT NULL,
`idhotel` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
)
INSERT INTO `season` (`id`, `begin_season`, `end_season`, `idhotel`) VALUES
(32, '2012-08-09', '2012-09-09', '52'),
(35, '2012-09-10', '2012-10-30', '52');
CREATE TABLE IF NOT EXISTS `prices` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`price_single` varchar(255) NOT NULL,
`price_double` varchar(255) NOT NULL,
`price_triple` varchar(255) NOT NULL,
`idseason` varchar(255) NOT NULL,
`idhotel` int(11) NOT NULL,
PRIMARY KEY (`id`)
)
INSERT INTO `prices` (`id`, `price_single`, `price_double`, `price_triple`, `idseason`, `idhotel`) VALUES
(31, '10', '20', '30', 32, 52),
(32, '20', '40', '60', 35, 52),
SELECT * FROM season, prices WHERE season.id=prices.idseason and (season.begin_season BETWEEN '2012-09-30' AND '2012-10-27' OR season.end_season BETWEEN '2012-09-30' AND '2012-10-27')
我的结果是空的。
答案 0 :(得分:0)
你可以使你的begin_date和end_date不是varchar。也许是时间戳或表示unix时间的整数。
答案 1 :(得分:0)
您的season
表格未正确设置。
begin_date
和end_date
为varchar(255)
...不是date
或datetime
或timestamp
所以你不能使用“BETWEEN”。将它们转换为日期/日期时间/时间戳,然后您可以使用所需的所有功能(>,<,BETWEEN等)。
答案 2 :(得分:0)
我认为您错误地格式化了日期。日期格式为
The DATE type is used for values with a date part but no time part. MySQL retrieves and displays DATE values in 'YYYY-MM-DD' format.
根据此处的文档:
http://dev.mysql.com/doc/refman/5.0/en/datetime.html
更改有什么用吗?
编辑:
哦,你甚至没有使用DATE作为类型。你应该这样做。