【问题标题】:Use data field from table as column header?使用表中的数据字段作为列标题?
【发布时间】:2012-04-24 09:20:59
【问题描述】:

我创建了一个带有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>

是否可以将月份列用作标题,在列标题中从左到右显示一月、二月、三月等,并将每个月的案例作为数据?

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

默认布局显示为:

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

【问题讨论】:

  • 我不确定我是否理解你想要的,但上面的代码有问题。您的循环应该创建 &lt;tr&gt; 而不是 &lt;tbody&gt;。只需将您的&lt;?php do { ?&gt; 放入您的&lt;tbody&gt;。回到您的问题,如果您可以通过示例输出进行更多解释,那将有很大帮助。

标签: php mysql


【解决方案1】:

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 中手动转换数据(繁琐)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多