2014-06-19 2 views
0

mysql 테이블에 레코드를 반환하는 SQL이 있습니다. 각 레코드에는 많은 필드가 있으며 샘플 유형 인 "type"필드 중 하나가 있습니다. 모든 샘플은 크게 6 가지 유형으로 분류됩니다. 테이블의 모든 레코드를 표시하고 있습니다. 하지만 '유형'별로 데이터를 그룹화하고 유형 표제를 별도의 표로 표시하려고합니다. 현재이 스크립트를 사용합니다.그룹 헤더가있는 테이블에 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>"; 

이렇게하면 모든 레코드가 하나의 테이블에 표시됩니다. 형식 필드에 같은 값을 가진 모든 레코드가 표시되고 다음 샘플 유형에 대한 새 테이블이 시작되면 테이블을 분리하려고합니다. (그룹 헤더와 같이) 별도의 SQL을 실행하는 것 외에 다른 쉬운 방법이 있습니까?

답변

0

당신의 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 태그를 삽입합니다 변경할 때마다 (당신이 분명히 거기에 원하는 다른 것을 추가 할 수 있습니다).

0

GROUP BY 방법론을 사용하여 데이터를 그룹화하는 SQL 저장 프로 시저를 설정했습니다. 나는이 기술을 Microsoft SQL Server에 대한 SSRS보고에서 가져갔습니다. 내가 많이 사용할 수있는 특정 정보가 들어있는 뷰를 만듭니다. 그런 다음 보고서 작성기 등에서 데이터 소스를 설정하는 것과 같은 역할을하는 저장 프로 시저를 실행합니다.

MainGroupA

ChildGroupA

데이터

데이터 {

MainGroupB을 : 그것은 자동으로 그룹 당신을위한 데이터는, 그때는 같은 구조의 데이터를 필터링 할 수 있습니다 것입니다 ChildGroupA {

...

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>"; 
} 
+0

큰 결과 집합이있는 경우 (렌더링 전에 전체 결과를 저장하기 때문에) 상당한 양의 메모리가 사용되므로 적합하지 않습니다. – Tom

관련 문제