我在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 | |
+------+-----+--------+-----+------+--------+
所以我的问题是:如何获得这样的输出?
这不重复。见下面的评论。
答案 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
强>