Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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,我正在开发一个订票成本计算器系统,我从Stackoverflow之前的问题中得到了灵感 我实际上有这个表结构: 房间号 开始日期 结束日期 价格 1. 2021-07-24 2021-08-06 115 1. 2021-08-07 2021-08-28 145 1. 2021-08-29 2021-09-12 65 在查询中,您缺少行“完全”包含在指定期间的情况:对于从2021-08-01到2021-08-31的期间,第二行根本不被考虑 尝试使用以下代码 $query = "

我正在开发一个订票成本计算器系统,我从Stackoverflow之前的问题中得到了灵感

我实际上有这个表结构:

房间号 开始日期 结束日期 价格 1. 2021-07-24 2021-08-06 115 1. 2021-08-07 2021-08-28 145 1. 2021-08-29 2021-09-12 65
在查询中,您缺少行“完全”包含在指定期间的情况:对于从
2021-08-01
2021-08-31
的期间,第二行根本不被考虑

尝试使用以下代码

$query = "
        SELECT
            room_id,
            SUM(price * ( 1 + Datediff( Least(end_date, '$end_date' - interval 1 day), Greatest( start_date, '$start_date') ) )) AS Total 
        FROM
            counter 
        WHERE  
            (
                ('$end_date' - interval 1 day) BETWEEN start_date AND end_date 
            ) 
            OR 
            (
                '$start_date' BETWEEN start_date AND end_date 
            )
            OR 
            (
                (start_date BETWEEN '$start_date' AND ('$end_date' - interval 1 day)) 
                AND 
                (end_date BETWEEN '$start_date' AND ('$end_date' - interval 1 day))
            )
        GROUP BY
            room_id
";
 
$result = $mysqli->query($query);
while($row = $result->fetch_array()){
    $rows[] = $row;
}

foreach($rows as $row){
    $final_cost=$row['Total'];
}

我不确定代码是否完全符合您的需要,因为我不确定计算的逻辑,但我希望它能解决您的问题。

是的。谢谢你的帮助!我们已经完成了一半的代码;唯一的问题是,根据我的数据库中有多少房间id,我得到x行。例如,我有6个room_id,所以我得到6行结果作为总计,当我打印它时,它总是采用最新的结果,而不是正确的结果。Room_id 1-300 Room_id 2-400 Room_id 3-250 Room_id 4-500 Room_id 5-320 Room_id 6-200如果选择的Room是4,系统总是将Room_id 6打印为总计(while循环中的最后一个值。谢谢