0

我创建了一个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 等,并将每个月的案例作为数据?

1 月 - 2 月 - 3 月
用户 1 100 47 89
用户 2 86 67 134

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

姓名 - 月份 - 案例
User1 100 年 1 月
用户 1 2 月 47 日
用户 2 1 月 67 日
4

1 回答 1

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基于基础表以这种方式构造的“虚拟表”。

  3. 在 PHP 中手动旋转数据(繁琐)。

于 2012-04-24T09:49:11.363 回答