Создание таблицы с помощью rowspan php

#php #html #html-table

#php #HTML #html-таблица

Вопрос:

Я пытался выяснить, как создать приведенную ниже таблицу на php, которую я затем включу на другую страницу, таблица, которую я хочу создать, это:

Что я хочу отобразить

Я использовал приведенный ниже код, который работает с первыми строками rowspan, но не с любыми другими:

 <?php
    $tbl1 = sqlsrv_query($connys,"

    select SectorTitle,DataTitle,sum(Aug18)[Aug18],sum(Sep18)[Sep18],sum(Oct18)[Oct18],sum(Nov18)[Nov18],sum(Dec18)[Dec18],sum(Jan19)[Jan19],sum(Feb19)[Feb19],sum(Mar19)[Mar19],sum(Apr19)[Apr19],sum(May19)[May19],sum(Jun19)[Jun19],sum(Jul19)[Jul19]
    from tblsomename

    ");
    if($tbl1 === false){
        die( print_r( sqlsrv_errors(), true));
    }
    while( $row = sqlsrv_fetch_array($tbl1, SQLSRV_FETCH_BOTH)){
    echo "<tr>";
    echo "<td rowspan='3'>".$row['SectorTitle']  ."</td>";

        while( $row2 = sqlsrv_fetch_array($tbl1, SQLSRV_FETCH_BOTH)){
    $DataTitle=$row2['DataTitle'];
    $Aug=$row2['Aug18'];
    $Sep=$row2['Sep18'];
    $Oct=$row2['Oct18'];
    $Nov=$row2['Nov18'];
    $Dec=$row2['Dec18'];
    $Jan=$row2['Jan19'];
    $Feb=$row2['Feb19'];
    $Mar=$row2['Mar19'];
    $Apr=$row2['Apr19'];
    $May=$row2['May19'];
    $Jun=$row2['Jun19'];
    $Jul=$row2['Jul19'];
    echo "<td>$DataTitle</td><td>$Aug</td><td>$Sep</td><td>$Oct</td><td>$Nov</td><td>$Dec</td><td>$Jan</td><td>$Feb</td><td>$Mar</td><td>$Apr</td><td>$May</td><td>$Jun</td><td>$Jul</td></tr>";
    }

    }

    ?>
  

Запрос не является фактическим запросом, но дает вам представление, поскольку он выводит через те же заголовки. Затем это включается в другой php-файл, который вставляет его между тегами и т.д.

В настоящее время мой код создает:

введите описание изображения здесь

Это правильно, хотя, похоже, я не могу заставить его перебирать бит sectortitle

Комментарии:

1. Вам следует выполнить отладку, $row и $row2 я думаю, что ваш цикл не настолько хорош :/

2. Похоже, вам нужно добавить a </tr> после того, как внутренняя часть while закончилась (между двумя закрывающими фигурными скобками).

3. Не while ли отсутствует какое-то условие? Первый while будет обработан только один раз, а все остальные данные будут обработаны во втором while — потому что вы выполняете цикл с тем же набором результатов

Ответ №1:

Я думаю, вы можете обойтись одним циклом while с некоторой добавленной логикой для обработки составных строк:

 $SectorTitle = "";

while( $row = sqlsrv_fetch_array($tbl1, SQLSRV_FETCH_BOTH)){
    echo "<tr>";

    // Check if there is a new sectortitle
    if($SectorTitle != $row['SectorTitle']) {
        $SectorTitle = $row['SectorTitle'];
        echo "<td rowspan='3'>$SectorTitle</td>";
    }

    $DataTitle=$row['DataTitle'];
    $Aug=$row['Aug18'];
    $Sep=$row['Sep18'];
    $Oct=$row['Oct18'];
    $Nov=$row['Nov18'];
    $Dec=$row['Dec18'];
    $Jan=$row['Jan19'];
    $Feb=$row['Feb19'];
    $Mar=$row['Mar19'];
    $Apr=$row['Apr19'];
    $May=$row['May19'];
    $Jun=$row['Jun19'];
    $Jul=$row['Jul19'];
    echo "<td>$DataTitle</td><td>$Aug</td><td>$Sep</td><td>$Oct</td><td>$Nov</td><td>$Dec</td><td>$Jan</td><td>$Feb</td><td>$Mar</td><td>$Apr</td><td>$May</td><td>$Jun</td><td>$Jul</td></tr>";
}
  

Комментарии:

1. Рад это слышать! Это отчет, который вам нужно будет регулярно выводить? Я спрашиваю, потому что думаю, что есть довольно простой способ избежать жестко заданных названий месяцев и сделать его немного более динамичным, но если это будет использоваться только один раз, тогда в этом нет смысла.