Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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_Sql_Codeigniter - Fatal编程技术网

Php 如何根据多个房间价格获得平均价格

Php 如何根据多个房间价格获得平均价格,php,sql,codeigniter,Php,Sql,Codeigniter,我有一张名为room_prices的表,根据指定的日期存储不同的价格。这是示例数据 id room_id date_from date_to price 1 1 3500.00 25 1 7/28/2012 7/29/2012 3600.00 27 1 8/24/2012 8/27/2012 3000.00 49 1 11/12/2012 11/16/2012

我有一张名为room_prices的表,根据指定的日期存储不同的价格。这是示例数据

id  room_id date_from   date_to     price
1   1                               3500.00
25  1       7/28/2012   7/29/2012   3600.00
27  1       8/24/2012   8/27/2012   3000.00
49  1       11/12/2012  11/16/2012  4000.00
第一行是房间1(房间id=1)的默认价格

当客人预订房间时,系统将首先查看房间价格表上的价格。如果在表中找到guest保留的日期,它将根据所选日期获得价格,而不是默认价格

如果客人在2012年10月11日至2012年11月11日期间预订了房间,则价格应为3500。 如果客人在2012年12月11日至2012年14月11日期间预订房间,则价格应为4000

如果客人在2012年10月11日至2012年13月11日期间预订房间,则平均价格应为3750。见下表:

11/10/2012  3500
11/11/2012  3500
11/12/2012  4000
11/13/2012  4000
            3750
所以我的问题是,是否有一个SQL代码可以得到平均价格

更新:

我尝试了这个sql,但没有成功:

SELECT avg(price) as avg_price
                        FROM lf_rooms_prices
                        WHERE room_id = 1
                        AND ((DATE_FORMAT(date_from, '%m/%d/%Y') >= '11/10/2012' 
                        AND DATE_FORMAT(date_from, '%m/%d/%Y') < '11/10/2012') 
                        OR (DATE_FORMAT(date_to, '%m/%d/%Y') > '11/13/2012' 
                        AND DATE_FORMAT(date_to, '%m/%d/%Y') <= '11/13/2012'))
选择平均(价格)作为平均价格
从lf_房间_价格
其中房间id=1
和((日期格式(日期自,'%m/%d/%Y')>='2012年11月10日'
和日期格式(日期从,'%m/%d/%Y')<'11/10/2012')
或(日期格式(日期至,“%m/%d/%Y”)>“2012年11月13日”
和DATE_格式(DATE_to,'%m/%d/%Y')有
AVG()
函数,因此要获得平均价格,您的查询应该如下所示:

SELECT AVG(`price`) FROM `room_prices` GROUP BY `room_id` 
请参阅文档。当然,您可以在查询中添加位置,以缩小平均值所需的数据集:

SELECT AVG(`price`) FROM `room_prices` WHERE <CONDITIONS> GROUP BY `room_id` 
从“房间价格”中选择平均价格('price'),其中按“房间id”分组
编辑:

完整查询:

SELECT AVG(`price`) FROM `room_prices` 
    WHERE `room_id` = 1
          AND ((DATE_FORMAT(date_from, '%m/%d/%Y') >= '11/10/2012' 
          AND DATE_FORMAT(date_from, '%m/%d/%Y') < '11/10/2012') 
          OR (DATE_FORMAT(date_to, '%m/%d/%Y') > '11/13/2012' 
          AND DATE_FORMAT(date_to, '%m/%d/%Y') <= '11/13/2012'))
GROUP BY `room_id` 
从“房间价格”中选择平均价格(`price`)
其中,`room\u id`=1
和((日期格式(日期自,'%m/%d/%Y')>='2012年11月10日'
和日期格式(日期从,'%m/%d/%Y')<'11/10/2012')
或(日期格式(日期至,“%m/%d/%Y”)>“2012年11月13日”

和日期格式(日期到,'%m/%d/%Y'))这是room_prices表中room 1的所有价格的平均值,但这不是op想要的。您可以将
WHERE
添加到查询中,以缩小您想要的平均值的数据集。@WebnetMobile.com WHERE子句是什么?再次更新-我之前过度聪明,并且在中意外忽略了
room_id
de>WHERE
@WebnetMobile.com它不返回任何值。