0

一部のデータを表示する効率的な方法を考え出そうとしていますが、まったく成功していません。

テーブルはいくつかのテーブルから動的に構築され、サイトごとの結果を示す列が入力されたヘッダーの行を表示します。例:

Site name | Column A | Column B | Column C => column headers continue from DB query
 Site A   | Result A | Result B | Result C
 Site B   | Result C | Result B | Result C
 Site C   | Result C | Result B | Result C

Results keep going vertically.

これが私が使用しているクエリです

$risk_section=$row_risk_category['risksectid'];
    mysql_select_db($database_auditing, $auditing);
$qry_selfsites = sprintf("SELECT
tblself.siteid AS selfsite, 
tblsite.sitename AS sitename,
tblsite.address AS address, 
 tblpct.pctname AS pctname,
  tblresultsnew.total,
   tblresultsnew.auditid AS auditid,
    tblriskcategories.risksectid AS risksectid,
     tblriskcategories.risksection AS risksection
FROM tblself 
 LEFT JOIN tblresultsnew ON tblself.auditid = tblresultsnew.auditid 
  LEFT JOIN tblsite ON tblself.siteid = tblsite.siteid 
   LEFT JOIN tblpct ON tblsite.pctid = tblpct.pctid
    LEFT JOIN tblriskcategories ON
tblresultsnew.risksectid=tblriskcategories.risksectid 
WHERE tblsite.pctid IN (SELECT pctid FROM tblreportpcts WHERE
pctreportid='$pctreportid') 
 AND tblsite.sitetypeid IN (SELECT sitetypeid FROM tblreportsites WHERE
pctreportid='$pctreportid')
  AND tblself.year = %s 
   ORDER BY tblsite.pctid,tblsite.sitename", 
 GetSQLValueString($yearofrpt, "int"));
$selfsites = mysql_query($qry_selfsites, $auditing) or die(mysql_error());
$totalRows_selfsites = mysql_num_rows($selfsites);

問題は、上記のクエリ (またはその適合バージョン) からデータを取得して、すべての結果が正しく整列するようにテーブルを動的に構築する方法があるかどうかです。これまでのところ、私はそれを垂直に構築することしかできません。

申し訳ありませんが、時間を編集してください(以下の回答で作業した後、質問の言葉遣いがうまくいかなかったことに気付きました)

私が取得しようとしているのは、クエリからの列ヘッダーの行です ( tblriskcategories.risksection AS risksection) これらは、列名を与えるために水平方向に入力されます。

次に、その下にサイト名が表示され、上の列ヘッダーに対応する結果が表示されます。

<table>
<tr>
<th>Sitename</th>
<?php while($row_selfsites=mysql_fetch_assoc($selfsites){  
 //loop through the section headers pulled from the DB (tblriskcategories)  
<th><?php echo $row_selfsites['risksection'];//show the section headers?></th>
<?php }   
//end header loop then start another loop to show a row for each site pulled
 //out by the query and show the relevant results in the correct column  
while($row_selfsites=mysql_fetch_assoc($selfsites)) {  
 //do the vertical drop matching the header rows with the sitenames from tblsite 
 //and the results from tblresultsnew 
?>  
<tr>  
<td><?php echo $row_selfsites['sitename'];?></td>  
<td><?php echo $row_selfsites['total'];  
//these need to grow to fit the headers and each site?></td>  
<tr>  
<?php } //end displayed data loop?>  
</table>  

以下の関連するテーブル構造:
tblresultsnew resultsid,auditid ,risksectid,total
tblriskcategories riskectid, risksection

したがって、tblself はデータが必要なサイトのリストと関連する auditid を
保持し、tblresultsnew は結果 (合計列) を各 risksectid と各 auditid に
保持します。
tblsite はサイト データを保持して何かを意味するよう
にします。これで質問がもう少し詳しく説明されることを願っています。

すべての助けをありがとう。
デイブ

4

1 に答える 1

0
$rows = array(
0 => array('headingA' => 'results1a', 'headingB' => 'results1b',  ),
1 => array('headingA' => 'results2a', 'headingB' => 'results2b',  ),
2 => array('headingA' => 'results3a', 'headingB' => 'results3b',  ),
);
// $rows is spoofing a db result set as an array
//var_dump( $rows );

$first = true ;
$header_row = "START TABLE <br />" ;
$data_rows = "";
foreach( $rows as $row ) {
  foreach( $row as $key=>$value ){
    if( $first === true ){
    $header_row .= "$key  | ";
    }
  $data_rows .= "$value |";
  }
if( $first ) $header_row .="<br />";

$data_rows .= "<br />";
$first = false;
}
echo $header_row . $data_rows . "END TABLE";

与えます:

START TABLE 
headingA | headingB | 
results1a |results1b |
results2a |results2b |
results3a |results3b |
END TABLE

それはあなたが求めている解決策のようなものですか?

于 2012-07-16T20:20:23.507 に答える