1

我正在尝试开发酒店预订系统。在我的搜索表单中,我有两个日期选择器(出发日期和到达日期)和目的地。我的日期有问题,在我的数据库中,我有两个表“价格”和“季节”,可以通过季节的 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`)
)

例如第一季我有 1 月 1 日至 2 月 28 日期间(每人每晚 100 美元) 3 月 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') 

我的结果是空的。

4

3 回答 3

0

您可以将 begin_date 和 end_date 设为 varchar 以外的其他内容。可能是时间戳或表示 unix 时间的整数。

于 2012-10-04T18:56:00.627 回答
0

您的season表设置不正确。

begin_date并且end_datevarchar(255)...不是datedatetimetimestamp

所以你不能使用“BETWEEN”。将它们转换为日期/日期时间/时间戳,然后您就可以使用您想要的所有功能(>、<、BETWEEN 等)。

于 2012-10-04T18:57:12.160 回答
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 作为类型。你应该这样做。

于 2012-10-04T18:57:17.570 回答