使用表中的数据字段作为列标题?

时间:2012-04-24 09:21:00

标签: php mysql

我创建了一个带有php后端的mysql页面,以显示包含员工姓名,月份,订单的小型表格的结果:

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

我是否可以使用月份列作为标题,在列标题中从左到右显示Jan,Feb,March等,每个月的情况作为数据?

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

使用默认布局时,它显示为:

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

1 个答案:

答案 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数据库的结构以更接近地反映这种所需的布局(一旦转换表格很容易,但可能会影响数据库的其他用途): / p>

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

    或者,你可以创建一个VIEW,这是一种基于底层表以这种方式构建的“虚拟表”。

  3. 使用PHP手动旋转数据(繁琐)。