Php 按照不同的日期间隔计算价格
我正在尝试为酒店开发一个预订系统。 在我的搜索表单中,我有两个日期选择器(出发日期和到达日期)和目的地。 我对日期有一个问题,在我的数据库中有两个表“prices”和“seasure”,它们可以通过seasure的id与jointure连接起来 表的结构:Php 按照不同的日期间隔计算价格,php,mysql,sql,Php,Mysql,Sql,我正在尝试为酒店开发一个预订系统。 在我的搜索表单中,我有两个日期选择器(出发日期和到达日期)和目的地。 我对日期有一个问题,在我的数据库中有两个表“prices”和“seasure”,它们可以通过seasure的id与jointure连接起来 表的结构: CREATE TABLE IF NOT EXISTS `prices` ( `id` int(11) NOT NULL AUTO_INCREMENT, `prix_single` varchar(255) NOT NULL, `p
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`)
)
例如a季,我有
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')
我的结果为空。您可以将开始日期和结束日期设置为varchar以外的其他日期。可能是表示unix时间的时间戳或整数。您的
季节表设置不正确
开始日期
和结束日期
是varchar(255)
。。。不是日期
或日期时间
或时间戳
所以你不能用“中间”。将它们转换为日期/日期时间/时间戳,然后您就可以使用您想要的所有功能(>,我认为您的日期格式不正确。日期的格式是
日期类型用于包含日期部分但不包含时间部分的值。MySQL检索并以“YYYY-MM-DD”格式显示日期值。
根据此处的文件:
改变它有什么作用吗
编辑:
哦,你甚至没有使用日期作为类型。你应该这样做。季节如何。首秀季节不给你一个错误?你的表格中没有这样的栏(除非你忘了用法语翻译那部分,但其他的都翻译了)。也没有价格。季节栏也没有!是的,我忘了翻译:)很抱歉:)嗯,我已经将日期的类型更改为Datetime,结束后将其转换为YYYY-MMM-DD格式。我更改了请求:选择*来自季节,价格在季节中。id=prix.seasure和(seasure.处子秀季节在'2012-09-30'和'2012-10-27'之间或seasure.end\u季节在'2012-09-30'和'2012-10-27'之间)我有两个错误,但是我认为它与我的hoster:import.php:Missing parameter:import\u type import.php:Missing parameter:format有关。你认为我的请求可以吗?谢谢!除非您使用的是时间,否则我建议您使用日期,而不是日期时间。但是我认为这个查询应该可以工作。我已经将格式更改为date,我的数据库包含以下日期值:2012-08-09 2012-09-09,2012-09-10 2012-10-30我删除了相同的查询,我有相同的错误(mport.php:Missing parameter:import\u type import.php:Missing parameter:format)我认为按照您的建议一切都可以,我将尝试联系我的主人,看看这些错误是否与!非常感谢!编辑:现在它工作了,似乎是缓存问题,我的查询返回给我一个空结果:/现在它工作了,似乎是缓存问题,我的查询中没有错误,但它返回给我一个空结果:/Post您的新查询和您正在查询的表。