2012-04-24 8 views
0

私のようなスタッフの名前、月、受注を含む小さなテーブルの結果を表示するmysqlバックエンドとphpページを作成しました:表のデータフィールドを列ヘッダーとして使用しますか?

<table border="1" cellpadding="1" cellspacing="1"> 
    <thead> 
     <tr> 
    <th scope="col">Name</th> 
    <th scope="col">Month</th> 
    <th scope="col">Cases</th>  
    </tr> 
    </thead> 
    <?php do { ?> 
    <tbody> 
    <tr> 
     <td><?php echo $row_rsChart2['ContactFullName']; ?></td> 
     <td><?php echo $row_rsChart2['Month']; ?></td> 
     <td><?php echo $row_rsChart2['Cases']; ?></td> 
    </tr> 
    </tbody> 
    <?php } while ($row_rsChart2 = mysql_fetch_assoc($rsChart2)); ?> 
</table> 

は、それは私が月を表示し、ヘッダーとして月の列を使用することができますことは可能です、2月、3月など、列ヘッダーの左から右へ、そしてデータとして毎月のケースから?デフォルトのレイアウトでは

 
Jan - Feb - Mar 
User1 100 47 89 
user2 86 67 134 

はそれはのように表示されます。

 
Name - Month - Cases 
User1 Jan 100 
User1 Feb 47 
User2 Jan 67 
+0

あなたが望むものが分かっているかどうかはわかりませんが、上記のコードに問題があります。あなたのループは ''ではなく ' 'を作成する必要があります。あなたの ''の中にあなたの ' 'を入れてください。あなたの質問に戻って、サンプル出力でもっと説明をつけることができれば、それは大いに役立つでしょう。 –

答えて

2

MySQLは、このようなデータを旋回させるための任意のネイティブサポートしていません。あなたは、いくつかのオプションがあります。

  1. は、手動での旋回操作を実行するために、むしろ恐ろしいMySQLのクエリを作成:

    SELECT * 
        FROM (
        SELECT StaffName, SUM(NumOrders) AS January 
        FROM Orders 
        WHERE Month = 'January' 
        GROUP BY StaffName 
    ) AS tJan 
        NATURAL JOIN (
        SELECT StaffName, SUM(NumOrders) AS February 
        FROM Orders 
        WHERE Month = 'February' 
        GROUP BY StaffName 
    ) AS tFeb 
        NATURAL JOIN (
        -- etc. 
    

    あなたはこの道を行くことを選択した場合、あなたがすることによってあなたの人生が少し容易になりますこのクエリは自動的に生成されます。これは、PHPのループ構文またはMySQLのプリペアドステートメントのいずれかを使用して自動的に生成されます。

  2. 行いMySQLデータベースの構造が変更されるように、一回限りの操作がより密接にこの所望のレイアウトを反映するように、上記(容易一度テーブルが変換されるが、データベースの他の用途影響を及ぼす可能性):

    CREATE TABLE NewOrders (PRIMARY KEY('StaffName')) 
    SELECT * FROM (
        -- etc. as above 
    

    また、VIEWを作成することもできます。VIEWは、このように基本テーブルに基づいて構造化された「仮想テーブル」の一種です。

  3. PHPでデータを手動でピボットする(面倒です)。

関連する問題