Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中透视MySQL内部联接结果?_Php_Mysql_Inner Join - Fatal编程技术网

如何在PHP中透视MySQL内部联接结果?

如何在PHP中透视MySQL内部联接结果?,php,mysql,inner-join,Php,Mysql,Inner Join,我有以下两个MySQL表: 玩家: | id | name | |----|---------| | 1 | Player1 | | 2 | Player2 | | 3 | Player3 | 分数: | key | id | round | score | |-----|----|-------|-------| | 1 | 1 | Rd1 | 20 | | 2 | 1 | Rd2 | 22 | | 3 | 1 | Rd3 | 19

我有以下两个MySQL表:

玩家:

| id | name    |
|----|---------|
| 1  | Player1 |
| 2  | Player2 |
| 3  | Player3 |
分数:

| key | id | round | score |
|-----|----|-------|-------|
| 1   | 1  | Rd1   | 20    |
| 2   | 1  | Rd2   | 22    |
| 3   | 1  | Rd3   | 19    |
| 4   | 2  | Rd1   | 18    |
| 5   | 2  | Rd2   | 23    |
| 6   | 2  | Rd3   | 19    |
其中scores.id=players.id

我的“玩家”表中将有90个以上的玩家,查询并将其插入HTML表以便于查看的最佳方法是什么?我希望有一个类似的输出:

| Player  | Round 1 | Round 2 | Round 3 |
|---------|---------|---------|---------|
| Player1 | 20      | 22      | 19      |
| Player2 | 18      | 23      | 19      |

这是我第一次尝试规范化表中的数据。我要处理多少个案子?我不确定使用内部联接来透视数据的最佳方式是什么。

这是我的解决方案,希望它能帮助:

SELECT
    name as Player,  
    SUM(CASE WHEN (s.round='Rd1') THEN s.score ELSE 0 END) AS Round1,
    SUM(CASE WHEN (s.round='Rd2') THEN s.score ELSE 0 END) AS Round2,
    SUM(CASE WHEN (s.round='Rd3') THEN s.score ELSE 0 END) AS Round3

FROM 
    players p
    JOIN scores s
    on s.id=p.id
GROUP BY 
    name
这将输出:

| Player  |  Round1 |  Round2 |  Round3 |
|---------|---------|---------|---------|
| Player1 | 20      | 22      | 19      |
| Player2 | 18      | 23      | 19      |

这是给你测试的

这是我的解决方案,希望有帮助:

SELECT
    name as Player,  
    SUM(CASE WHEN (s.round='Rd1') THEN s.score ELSE 0 END) AS Round1,
    SUM(CASE WHEN (s.round='Rd2') THEN s.score ELSE 0 END) AS Round2,
    SUM(CASE WHEN (s.round='Rd3') THEN s.score ELSE 0 END) AS Round3

FROM 
    players p
    JOIN scores s
    on s.id=p.id
GROUP BY 
    name
这将输出:

| Player  |  Round1 |  Round2 |  Round3 |
|---------|---------|---------|---------|
| Player1 | 20      | 22      | 19      |
| Player2 | 18      | 23      | 19      |

这是给你测试的

我有一个替代性的解决方案,它使用子查询,有以下好处:没有得分的玩家也会被列出

    SELECT
     p.name,  
    ifnull((select score from scores where id = p.id and round='Rd1' limit 1), 0) as Round1,
    ifnull((select score from scores where id = p.id and round='Rd2' limit 1), 0) as Round2,
    ifnull((select score from scores where id = p.id and round='Rd3' limit 1), 0) as Round3
FROM  players p        
GROUP BY p.name, p.id

我有一个略微替代的解决方案,它使用子查询,有以下好处,没有分数的玩家也可以被列出

    SELECT
     p.name,  
    ifnull((select score from scores where id = p.id and round='Rd1' limit 1), 0) as Round1,
    ifnull((select score from scores where id = p.id and round='Rd2' limit 1), 0) as Round2,
    ifnull((select score from scores where id = p.id and round='Rd3' limit 1), 0) as Round3
FROM  players p        
GROUP BY p.name, p.id

那么到目前为止,您尝试做了什么?
“从玩家中选择t1.ID、t1.name、t2.round作为t1内部连接分数,作为t1上的t2。ID=t2.ID按ID asc排序”)我还没有弄清楚如何在单独的专栏中引入这一轮。到目前为止,您尝试做了什么?
“从玩家中选择t1.ID,t1.name,t2.round,作为t1内部连接分数,作为t1上的t2。ID=t2.ID按ID asc排序”)我还没有弄清楚如何在单独的列中引入这一轮,我也将根据表中的数据尝试这一点。谢谢我想你也许可以使用--这是mysql的一个很好的特性。我也会根据表中的数据来尝试。谢谢我想你也许可以使用--这是mysql的一个很好的特性。