【问题标题】:How do I pivot MySQL INNER JOIN results in PHP?如何在 PHP 中旋转 MySQL INNER JOIN 结果?
【发布时间】:2018-03-09 14:57:20
【问题描述】:

我有以下 2 个 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    |

其中 score.id=players.id

我的“玩家”表中将有超过 90 个玩家,查询这个并将其插入 HTML 表以使其更易于查看的最佳方法是什么?我希望有类似这样的输出:

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

这是我第一次尝试规范化表中的数据。我将不得不做一些案例吗?我不确定使用 INNER JOIN 旋转数据的最佳方法是什么。

【问题讨论】:

  • 那么到目前为止你尝试过什么?
  • "select t1.ID, t1.name, t2.round, from players as t1 INNER JOIN scores as t2 on t1.id=t2.id ORDER BY id asc "); 我一直无法弄清楚如何在单独的列中引入这一轮

标签: php mysql inner-join


【解决方案1】:

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

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      |

这个Fiddle给你测试!

【讨论】:

    【解决方案2】:

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

        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
    

    【讨论】:

    猜你喜欢
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多