按照不同的日期间隔计算价格

时间:2012-10-04 18:51:26

标签: php mysql sql

我正在努力为酒店开发预订系统。 在我的搜索表单中,我有两个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') 

我的结果是空的。

3 个答案:

答案 0 :(得分:0)

你可以使你的begin_date和end_date不是varchar。也许是时间戳或表示unix时间的整数。

答案 1 :(得分:0)

您的season表格未正确设置。

begin_dateend_datevarchar(255) ...不是datedatetimetimestamp

所以你不能使用“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作为类型。你应该这样做。