MySQL总计表

时间:2018-03-05 17:52:06

标签: php mysql database-design pivot calculated-columns

一位朋友每年都会使用高尔夫大赛来运行每日一次的奇幻运动型游泳池。它已作为excel电子表格处理,现在他正在寻求帮助将其转换为使用WordPress中的PHP和MySQL的网站。

有两个表:

高尔夫球手(浓缩):

+---------+-----+-----+-----+-----+------+------+------+------+
|  gName  | Rd1 | Rd2 | Rd3 | Rd4 | SRd1 | SRd2 | SRd3 | SRd4 |
+---------+-----+-----+-----+-----+------+------+------+------+
| Spieth  |  71 |  70 |  68 |  71 |    0 |    1 |    3 |    0 |
| Johnson |  70 |  70 |  69 |  70 |    1 |    1 |    2 |    1 |
| Day     |  71 |  71 |  70 |  71 |    0 |    0 |    1 |    0 |
+---------+-----+-----+-----+-----+------+------+------+------+

如果高尔夫球手在Par(SRd1 ...)

下获得每次击球的游泳池参与者“积分”

和球员(精简),他们的比赛名单存储在其中:

+---------+---------+------+------+------+------+-------+
|  pName  |  gName  | SRd1 | SRd2 | SRd3 | SRd4 | Total |
+---------+---------+------+------+------+------+-------+
| Player1 | Spieth  |    0 |    1 |    3 |    0 |     4 |
| Player1 | Johnson |    1 |    1 |    2 |    1 |     5 |
| Player1 | Day     |    0 |    0 |    1 |    0 |     1 |
+---------+---------+------+------+------+------+-------+

我使用单个查询来抓取我需要的相关数据并将其输入到表格,高尔夫球手和玩家中。

我没有问题只显示高尔夫球手的排行榜,这是一个直接的SELECT查询

我的朋友希望通过与此类似的游泳池参与者显示结果:

+---------+------+------+------+------+-------+
| Player1 | SRd1 | SRd2 | SRd3 | SRd4 | Total |
+---------+------+------+------+------+-------+
| Spieth  |    0 |    1 |    3 |    0 |     4 |
| Johnson |    1 |    1 |    2 |    1 |     5 |
| Day     |    0 |    0 |    1 |    0 |     1 |
| Total   |    1 |    2 |    6 |    1 |    10 |
+---------+------+------+------+------+-------+

我目前的查询是:

<table>
<?php
global $wpdb;

$golfers = $wpdb->get_results("SELECT * FROM mr2017");

foreach ($golfers as $golfer ) {
    if ($golfer->pName != $lastp){
        echo '<tr height=10></tr>';
            echo '<tr>
            <th>' . $golfer->pName . '</th>
            <th> Rd1 </th>
            <th> Rd2 </th>
            <th> Rd3 </th>
            <th> Rd4 </th>
            <th>Total</th>
            </tr>';
            $lastp = $golfer->pName;
        }
        echo '<tr>
            <td>' .$golfer->mName. '</td>
            <td>' .$golfer->SRd1. '</td>
            <td>' .$golfer->SRd2. '</td>
            <td>' .$golfer->SRd3. '</td>
            <td>' .$golfer->SRd4. '</td>
            <td>' .$golfer->Tot. '</td>
            </tr>';
}
?>
</table>

问题:

  1. 处理“总计”行的最佳方法是什么?通过包括一个 'Total'作为玩家表中的'gName'并包括总数 那列?或者有没有办法在我的查询中使用SUM?

  2. 维持高尔夫球手得分的最佳方法是什么?目前我 使用单个抓取查询更新每个表中的分数。是 最好从连接查询中选择这些结果吗?

  3. 希望这很清楚,我根本不是程序员,只是想为自己学习。

1 个答案:

答案 0 :(得分:0)

嗯,为了让你开始,一个标准化环境的例子可能如下(此时可能值得一提,我对高尔夫几乎一无所知)。

golfers
+------------+---------+
|  golfer_id | name    |
+------------+---------+
|          1 | Spieth  |
|          2 | Johnson |
|          3 | Day     |
+------------+---------+

par
+-----+
| par |
+-----+
|  71 |
+-----+

scorecard
+-----------+-------+-------+
| golfer_id | round | score |
+-----------+-------+-------+
|         1 |     1 |    71 |
|         1 |     2 |    70 |
|         1 |     3 |    68 |
|         1 |     4 |    71 |
...
+-----------+-------+-------+

你可能需要更多地解释比赛之间的关系&#39;和&#39;轮次&#39;