所以,我有一个类似于这个的 MySQL 表:
|Day | Participant| Score |
+----+------------+-------+
|Mon | Andy | 9 |
|Mon | Betty | 8 |
|Mon | Charlie | 7 |
|Tue | Andy | 6 |
|Tue | Betty | 6 |
|Tue | Charlie | 8 |
|Wed | Andy | 7 |
|Wed | Charlie | 4 |
我想把它输出到这个:
| Day | Andy | Betty | Charlie |
+-----+------+-------+---------+
| Mon | 9 | 8 | 7 |
| Tue | 6 | 6 | 7 |
| Wed | 7 | null | 4 |
我用 PHP 解决了这个问题,这就是我想出的:
- 查询每个参与者的姓名。
使用 PHP,为每个参与者每天的分数构建一个子查询,如下所示:
SELECT score FROM TableName WHERE (Day=ref_point AND Participant='Andy')
生成包含所有子查询的主查询,如下所示:
SELECT Day AS ref_point,(/* Sub-query for Andy */) AS Andy,(/* Sub-query for Betty */) AS Betty,(/*Sub-queries for the rest of participants */) AS Others FROM TableName GROUP BY Day
这工作得很好,但是随着参与者数量的增加,查询字符串也会增加。我担心有一天查询会超过 PHP 的最大字符串长度。我需要知道如何在 MySQL 中完全做到这一点。