-1

这段代码可以很好地显示给定日期的预订列表,并将客人和桌数相加一整天。对所有返回的预订求和。

我正在尝试做或弄清楚的是一种根据特定时间间隔获取总数的方法。例如8:00、9:00、10:00等有多少客人和多少桌......

我可以看到总和的计算位置,但需要帮助添加一种方法来添加变量以查看 reservation_time 并按小时计算总和,而不仅仅是每天的总和。

        $tablesum ++;
        $guestsum += $row->reservation_pax;
<?php echo $guestsum;?>&nbsp;&nbsp;<?php echo _guest_summary;?>

提取数据然后将其汇总的完整代码:

<?php
    // Clear reservation variable
    $reservations ='';

    if ($_SESSION['page'] == 1) {
        $reservations = querySQL('all_reservations');
    }else{
        $reservations = querySQL('reservations');
    }

    // reset total counters
    $tablesum = 0;
    $guestsum = 0;

    if ($reservations) {

        //start printing out reservation grid
        foreach($reservations as $row) {
            // reservation ID
            $id = $row->reservation_id;
            $_SESSION['reservation_guest_name'] = $row->reservation_guest_name;
            // check if reservation is tautologous
            $tautologous = querySQL('tautologous');

        echo "<tr id='res-".$id."'>";
        echo "<td";
        // daylight coloring
        if ($row->reservation_time > $daylight_evening){
            echo " class='evening noprint'";
        }else if ($row->reservation_time > $daylight_noon){
            echo " class='afternoon noprint'";
        }else if ($row->reservation_time < $daylight_noon){
            echo " class='morning noprint'";
        }

        echo " style='width:10px !important; padding:0px;'>&nbsp;</td>";
        echo "<td id='tb_time'";
        // reservation after maitre message
        if ($row->reservation_timestamp > $maitre['maitre_timestamp'] && $maitre['maitre_comment_day']!='') {
            echo " class='tautologous' title='"._sentence_13."' ";
        }
        echo ">";
        echo "<strong>".formatTime($row->reservation_time,$general['timeformat'])."</strong></td>";
        echo "<td id='tb_pax'><strong class='big'>".$row->reservation_pax."</strong>&nbsp;&nbsp;<span class='noprint'>";
        $tablesum ++;
        $guestsum += $row->reservation_pax;
        }
    }
    ?>

    <?php echo $guestsum;?>&nbsp;&nbsp;<?php echo _guest_summary;?>

好的,我快接近了:能够将其汇总并显示...尽管我需要再缩小一个参数。这是给我所有预订的客人总数(reservation_pax)。我需要在给定的日期或会话前完成。该页面仅显示所选日期的预订,但脚本会计算 8:00 预订的所有天数。

只需要帮助缩小会话页面已经为正在查看的特定日期创建。

$result = mysql_query("SELECT SUM(reservation_pax) FROM reservations WHERE reservation_time = '8:00'"); 
if($result === FALSE) {
die(mysql_error()); // TODO: better error handling
}

while($row = mysql_fetch_array($result))
{

   echo $row['SUM(reservation_pax)'];
}
4

2 回答 2

0

您需要生成具有时间间隔的系列,假设您有一些超过 15 行的表(我称之为lookup_table),您可以使用 uservars 执行此操作。

SELECT d.starttime, d.endtime, COUNT(r.id) AS total
FROM
    (
     SELECT
        @starttime := @starttime + INTERVAL 1 HOUR starttime,
        @endtime := @endtime + INTERVAL 1 HOUR endtime
     FROM
        lookup_table
     CROSS JOIN (SELECT @starttime := CURRENT_DATE + INTERVAL 7 HOUR,
                        @endtime := CURRENT_DATE + INTERVAL 8 HOUR - INTERVAL 1 SECOND) v
     LIMIT 15
    ) d
LEFT JOIN
    reservations r
    ON r.reservation_time BETWEEN d.starttime AND d.endtime
GROUP BY d.starttime, d.endtime

如果您需要从保留中过滤掉一些数据,则需要将其添加到连接条件中。

这是基于您提供的信息(不多)。

于 2014-10-26T08:18:47.410 回答
0
$result = mysql_query("SELECT SUM(reservation_pax) FROM reservations WHERE reservation_time = '8:00:00' AND reservation_date = '2014-10-27' AND reservation_hidden ='0'") ; 
if($result === FALSE) {
    die(mysql_error()); // TODO: better error handling
}

while($row = mysql_fetch_array($result))
{
   echo $row['SUM(reservation_pax)'];
}

?>
于 2014-10-27T23:10:03.847 回答