Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按照不同的日期间隔计算价格_Php_Mysql_Sql - Fatal编程技术网

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

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

我正在尝试为酒店开发一个预订系统。 在我的搜索表单中,我有两个日期选择器(出发日期和到达日期)和目的地。 我对日期有一个问题,在我的数据库中有两个表“prices”和“seasure”,它们可以通过seasure的id与jointure连接起来

表的结构:

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您的新查询和您正在查询的表。