在具有组头的表中显示mysql数据

时间:2014-06-19 11:11:22

标签: php mysql sql

我有一个SQL,它返回mysql表中的记录。每个记录都有许多字段,其中一个字段叫做" type"这是样本的类型。所有样品大致分为六种类型。我正在显示表中的所有记录。但是我希望通过' type'对数据进行分组。并显示单独的表格,类型为侧标题。目前我使用这个脚本。

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>";

这将显示一个表中的所有记录。我想在显示类型字段中具有相同值的所有记录时中断表,并为下一类样本开始新表。 (比如组头)除了运行单独的SQL之外,还有什么简单的方法吗?

3 个答案:

答案 0 :(得分:1)

确保您的SQL查询为ORDER BY type,然后在while循环中执行此操作:

$lastType = '';
echo '<table>';
while($data=mysql_fetch_array($result)) {
    if($lastType != '' && $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标记(您显然可以在其中添加任何其他内容)。

答案 1 :(得分:0)

我设置了一个SQL存储过程,我使用GROUP BY方法对数据进行分组。我从Microsoft SQL Server上的SSRS报告中采用了这种技术。我创建了包含我可能会使用的特定信息的视图。然后我执行存储过程,就像在报表生成器或其他东西中设置数据源一样。这将自动为您分组数据,然后我可以在以下结构中过滤数据:

MainGroupA

ChildGroupA

数据

数据

MainGroupB {

ChildGroupA {

...

答案 2 :(得分:0)

如果您不想按查询中的类型进行排序,则可以将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>";
}