как объединить строку с одинаковой датой - PullRequest
0 голосов
/ 23 января 2019

как я могу сгруппировать одну и ту же строку с одинаковой датой вместе ... the first picture

мне нужна такая таблица table i need каждая строка сОдна и та же группа дат. Я попробовал group_concat и group_by, но это не сработало. Я хочу, чтобы какой-то фильтр в строке объединения php имел одинаковую дату вместе

мой код:

   while ($row = mysqli_fetch_array($result)) {
                            $start_res = strtotime($row['from_date']);
                            $end_res = strtotime($row['to_date']);
                            for ($res = $start_res; $res <= $end;$res+=86400) {
                                $res_date = date("m/d/Y", $res);
                                $startres = strtotime($res_date);

                                if ($startres >= $start_res && $startres<=$end_res) {
                      ?>
                                    <tr>
                                        <td><?= $res_date ?> </td>
                                        <td><?= $row['1'] ?> </td>
                                        <td><?= $row['2'] ?> </td>
                                        <td><?= $row['3'] ?> </td>
                                        <td><?= $row['4'] ?> </td>
                                        <td><?= $row['5'] ?> </td>
                                        <td><?= $row['6'] ?> </td>
                                        <td>0 </td>
                                        <td style="background-color:gold"> 0</td>
                                        <td>0 </td>        
                                        <td>0</td>
                                        <td>0</td>
                                        <td>0</td>
                                    </tr>
        <?php }}}?>

моя таблица: mysqli table sql query:

       $sql = "
         SELECT * FROM  mytable
        WHERE hotel_id = '" . $hotel_id . "'          
        and from_date  between '" . $date . "' and '" . $end_date . "'
        or to_date  between '" . $date . "' and '" . $end_date . "'
        ORDER BY from_date asc

        ";
    $result = mysqli_query($con, $sql); 

1 Ответ

0 голосов
/ 23 января 2019

Исходя из структуры вашей таблицы, это, вероятно, проще всего сделать в PHP.Для этого в SQL потребуется таблица календаря, чтобы присоединиться к каждой строке.Поэтому вам нужно агрегировать значения для каждой даты, а затем выводить их.Примечание. Я предпочитаю работать с именами столбцов в качестве индексов массивов, поскольку легче увидеть, что вы делаете:

$data = array();
// collate the data
while ($row = mysqli_fetch_array($result)) {
    $start_res = strtotime($row['from_date']);
    $end_res = strtotime($row['to_date']);
    for ($res = $start_res; $res <= $end && $res <= $end_res; $res += 86400) {
        if (!isset($data[$res])) $data[$res] = array('totals' => 0, 'agent' => 0, 'direct' => 0, 'over_agent' => 0, 'over_hotel' => 0, 'allotment' => 0);
        $data[$res]['totals'] += $row['totals'];
        $data[$res]['agent'] += $row['agent'];
        $data[$res]['direct'] += $row['direct'];
        $data[$res]['over_agent'] += $row['over_agent'];
        $data[$res]['over_hotel'] += $row['over_hotel'];
        $data[$res]['allotment'] += $row['allotment'];
    }
}
// sort the data by date
ksort($data);
// now display the combined data
foreach ($data as $res_date => $row) {
?>
<tr>
    <td><?= date('m/d/Y', $res_date) ?> </td>
    <td><?= $row['totals'] ?> </td>
    <td><?= $row['agent'] ?> </td>
    <td><?= $row['direct'] ?> </td>
    <td><?= $row['over_agent'] ?> </td>
    <td><?= $row['over_hotel'] ?> </td>
    <td><?= $row['allotment'] ?> </td>
    <td>0</td>
    <td style="background-color:gold"> 0</td>
    <td>0 </td>        
    <td>0</td>
    <td>0</td>
    <td>0</td>
</tr>
<?php
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...