查询以获取最新的游戏结果

时间:2016-04-13 11:57:36

标签: mysql sql

我在MySQL数据库中跟踪某些游戏结果。现在我想在一个漂亮的HTML表格中打印最新的结果。我有三张桌子:

包含游戏的所有参与者。

+-----+---------+
| id  |  name   |
+-----+---------+
|  2  | Jon     |
|  3  | Philip  |
|  4  | Tom     |
|  5  | Joey    |
|  6  | Joanna  |
+-----+---------+

回合包含有关每轮游戏的信息。除此之外,还有比赛的那一周。

+-----+------+
| id  | week |
+-----+------+
|  1  |    9 |
|  2  |   10 |
|  3  |   11 |
|  4  |   12 |
|  5  |   13 |
+-----+------+

结果包含每个人和每个人的结果。结果列是游戏中的分数。

+------------+----------+--------+
|  personId  | roundId  | result |
+------------+----------+--------+
|         2  |       1  |      2 |
|         4  |       1  |      6 |
|         5  |       1  |      6 |
|         3  |       1  |     10 |
|         2  |       2  |     16 |
|         4  |       2  |     14 |
|         5  |       2  |      5 |
|         3  |       2  |     11 |
+------------+----------+--------+

现在我想打印一张每周都有球员得分的牌桌。我希望我的输出看起来像下表。请注意,如果玩家未参加一周,则该单元格应为空。

+------+-----+--------+-----+------+--------+
| Week | Jon | Philip | Tom | Joey | Joanna |
+------+-----+--------+-----+------+--------+
|    9 |   2 |     10 |   6 |    6 |        |
|   10 |  16 |     11 |  14 |    5 |        |
+------+-----+--------+-----+------+--------+

所以我的问题是:如何获得这样的输出?

这不重复。见下面的评论。

1 个答案:

答案 0 :(得分:1)

正如评论中所述,您想要制作PIVOT,但MySQL不支持它。

但是,由于您的玩家数量较少并且已修复,您可以在GROUP BY查询中对玩家进行硬编码,如下所示:

SELECT  R.Week, 
        SUM(CASE WHEN  P.name = 'Jon'       THEN S.result END) AS Jon,
        SUM(CASE WHEN  P.name = 'Philip'    THEN S.result END) AS Philip,
        SUM(CASE WHEN  P.name = 'Tom'       THEN S.result END) AS Tom,
        SUM(CASE WHEN  P.name = 'Joey'      THEN S.result END) AS Joey, 
        SUM(CASE WHEN  P.name = 'Joanna'    THEN S.result END) AS Joanna                                                     
FROM persons P 
    LEFT JOIN  results S ON P.id=S.personId
    LEFT JOIN rounds R ON R.id=S.roundId
WHERE R.week IS NOT NULL
GROUP BY R.Week

SqlFiddleDemo