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

Php 在具有组头的表中显示mysql数据,php,mysql,sql,Php,Mysql,Sql,我有一个SQL,它返回mysql表中的记录。每个记录都有许多字段,其中一个字段称为“type”,它是示例的类型。所有样本大致分为六类。我正在显示表中的所有记录。但我想按“类型”对数据进行分组,并以类型作为侧标题显示单独的表。目前我使用这个脚本 echo "<table class='wqtable'><tr><th>USIN</th><th>Type</th><th>Date of Coll.</th>

我有一个SQL,它返回mysql表中的记录。每个记录都有许多字段,其中一个字段称为“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>";
echo“Coll.LocationDescriptionH3CSRAnalyst的使用说明”;
而($data=mysql\u fetch\u数组($result)){
回声“;
echo“$data['usin']”;
回显“$data['type']”;
回显“$data['doc1']”;
回显“$data['location']”;
echo“$data['description']”;
echo“$data['h3']”;
回显“$data['cs']”;
回显“$data['sr']”;
echo“$data['name']”;
回声“;
}
回声“;

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

确保您的SQL查询是按类型排序的,然后在
循环中执行以下操作:

$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>';
$lastType='';
回声';
而($data=mysql\u fetch\u数组($result)){
如果($lastType!=''&&$lastType!=$data['type'])){
回声';
回声';
}
回声“;
echo“$data['usin']”;
回显“$data['type']”;
回显“$data['doc1']”;
回显“$data['location']”;
echo“$data['description']”;
echo“$data['h3']”;
回显“$data['cs']”;
回显“$data['sr']”;
echo“$data['name']”;
回声“;
$lastType=$data['type'];
}
回声';

我没有对它进行测试,但每当
类型发生更改时,它都会插入一个关闭和打开
表的标记(显然,您可以在其中添加任何您想要的内容)。

我设置了一个SQL存储过程,使用该方法对数据进行分组。我从MicrosoftSQLServer上的SSRS报告中获取了这项技术。我创建的视图包含我可能经常使用的特定信息。然后我执行存储过程,就像在报表生成器中设置数据源一样。这将自动为您分组数据,然后我可以按如下结构过滤数据:

主要群体

儿童组

资料

资料

主要群组B{

儿童组{


如果不想按查询中的类型排序,可以将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>";
}
$table_types=array();
而($data=mysql\u fetch\u数组($result))
{
$html=“”;
$html.=”;
$html.=''.$data['usin'].'';
$html.=''.$data['type'].'';
$html.=''.$data['doc1'].'';
$html.=''.$data['location'].'';
$html.=''.$data['description'].'';
$html.=''.$data['h3'].'';
$html.=''.$data['cs'.'';
$html.=''.$data['sr'].'';
$html.=''.$data['name'].'';
$html.=”;
$table_types[$data['type']][]=$html;
}
foreach($type=>$rows的表类型)
{
//使用switch语句将正确的文本标题置于表格上方。
回显“类型”。$Type.”;
echo“Coll.LocationDescriptionH3CSRAnalyst的使用说明”;
回波内爆($行);
回声“;
}

请注意,如果结果集很大,这将不合适,因为它将使用相当多的内存(因为它在渲染之前存储整个结果)。