Отображение данных mysql в таблицах с заголовками групп

#php #mysql #sql

#php #mysql #sql

Вопрос:

У меня есть SQL, который возвращает записи в таблице mysql. Каждая запись имеет много полей, и одно из полей называется «тип», которое является типом образца. Все образцы в целом классифицируются на шесть типов. Я отображаю все записи в таблице. Но я хочу сгруппировать данные по «типу» и показать отдельные таблицы с типом в качестве заголовка. В настоящее время я использую этот скрипт.

 echo "<table class='wqtable'><tr><th>USIN</th><th>Type</th><th>Date of Coll.</th>   <th>Location</th><th>Description</th><th>H3</th><th>Cs</th><th>Sr</th><th>Analyst</th></tr>";


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

echo "<tr>";

echo "<td>".$data['usin']."</td>";
echo "<td>".$data['type']."</td>";
echo "<td>".$data['doc1']."</td>";
echo "<td>".$data['location']."</td>";
echo "<td>".$data['description']."</td>";
echo "<td>".$data['h3']."</td>";
echo "<td>".$data['cs']."</td>";
echo "<td>".$data['sr']."</td>";
echo "<td>".$data['name']."</td>";

echo"</tr>";
}
echo "</table>";
  

При этом отображаются все записи в одной таблице. Я хочу разбить таблицу, когда отображаются все записи с одинаковым значением в поле типа, и начать новую таблицу для следующего типа образцов. (например, заголовок группы) Есть ли какой-нибудь простой способ, кроме запуска отдельных SQLL?

Ответ №1:

Убедитесь, что ваш SQL-запрос ORDER BY type , а затем в вашем while цикле вы могли бы сделать это:

 $lastType = '';
echo '<table>';
while($data=mysql_fetch_array($result)) {
    if($lastType != '' amp;amp; $lastType != $data['type']) {
        echo '</table>';
        echo '<table>';
    }

    echo "<tr>";
    echo "<td>".$data['usin']."</td>";
    echo "<td>".$data['type']."</td>";
    echo "<td>".$data['doc1']."</td>";
    echo "<td>".$data['location']."</td>";
    echo "<td>".$data['description']."</td>";
    echo "<td>".$data['h3']."</td>";
    echo "<td>".$data['cs']."</td>";
    echo "<td>".$data['sr']."</td>";
    echo "<td>".$data['name']."</td>";
    echo"</tr>";

    $lastType = $data['type'];
}
echo '</table>';
  

Я не тестировал его, но при type каждом изменении он вставляет закрывающий и открывающий table тег (очевидно, вы можете добавить туда все, что захотите).

Ответ №2:

Я настроил хранимую процедуру SQL, в которой я группирую данные, используя методологию GROUP BY . Я взял эту технику из отчетов SSRS на Microsoft SQL Server. Я создаю представления, содержащие конкретную информацию, которую я могу часто использовать. Затем я выполняю хранимые процедуры, которые действуют как настройка источника данных в построителе отчетов или что-то в этом роде. Это автоматически сгруппирует данные для вас, после чего я смогу отфильтровать данные в структуре, подобной:

MainGroupA

Дочерняя группа

данные

данные

MainGroupB{

Дочерняя группа{

Ответ №3:

Если вы не хотите упорядочивать по типу в запросе, вместо этого вы можете создать свой HTML в виде массива. Например:

 $table_types = array();

while($data = mysql_fetch_array($result))
{
    $html = "";
    $html .= "<tr>";
    $html .= "<td>".$data['usin']."</td>";
    $html .= "<td>".$data['type']."</td>";
    $html .= "<td>".$data['doc1']."</td>";
    $html .= "<td>".$data['location']."</td>";
    $html .= "<td>".$data['description']."</td>";
    $html .= "<td>".$data['h3']."</td>";
    $html .= "<td>".$data['cs']."</td>";
    $html .= "<td>".$data['sr']."</td>";
    $html .= "<td>".$data['name']."</td>";
    $html .= "</tr>";

    $table_types[$data['type']][] = $html;
}

foreach($table_types as $type => $rows)
{
    // Use a switch statement to put the correct text heading above the table.
    echo "<h3>Type ".$type."</h3>";
    echo "<table class='wqtable type-".$type."'><tr><th>USIN</th><th>Type</th><th>Date of Coll.</th><th>Location</th><th>Description</th><th>H3</th><th>Cs</th><th>Sr</th><th>Analyst</th></tr>";
    echo implode($rows);
    echo "</table>";
}
  

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

1. Обратите внимание, что это не подходит, если у вас большой набор результатов, так как для этого потребуется достаточное количество памяти (потому что он сохраняет весь результат перед рендерингом).