【问题标题】:MySQL Query: Join and GroupMySQL 查询:加入和分组
【发布时间】:2009-09-18 18:21:16
【问题描述】:

我有一个简单的竞赛报名网络表格。每位参赛者都可以选中一个复选框,以便有资格赢得 20 个奖项中的一个。提交表单后,会在“参赛者”表中创建一行。对于他们检查的每个奖品,都会在“条目”表中创建一行。

我正在尝试制作一个“结果”页面,列出所有奖品名称,并在每个奖品名称下方列出所有希望有资格赢得该奖品的参赛者。没有参赛者报名的奖品将不会在其姓名下方列出参赛者。

如何编写高效的 MySQL 查询来轻松生成这样的页面(使用 PHP)?

表格

参赛者

  • 身份证
  • 姓名
  • 电子邮件
  • 地址
  • 城市
  • 状态

参赛作品

  • 身份证
  • contestant_id
  • prize_id

奖品

  • 身份证
  • 姓名
  • 说明

【问题讨论】:

    标签: sql database mysql performance


    【解决方案1】:
    SELECT p.name AS prize, c.name AS contestant FROM contestants c
    INNER JOIN entries e ON c.id = e.contestant_id
    INNER JOIN prizes p ON e.prize_id = p.id
    ORDER BY p.id
    

    它会给你结果:

    prize 1 | contestant 1.1
    prize 1 | contestant 1.2
    ...
    prize 1 | contestant 1.n
    prize 2 | contestant 2.1
    prize 2 | contestant 2.2
    ...
    prize 2 | contestant 2.n
    ....
    prize m | contestant m.n
    

    如果你想要这样的列表:

    prize 1
        contestant 1.1
        contestant 1.2
        ...
        contestant 1.n  
    prize 2
        contestant 2.1
        contestant 2.2
        ...
        contestant 2.n
    

    您必须在 PHP 中格式化结果。

    可能是这样的:

    $old_prize = '';
    
    $result = mysql_query(<above query>);
    
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    
        if($old_prize != $row["prize"]) {
            $old_prize = $row["prize"];
            echo "Prize: ".$row["prize"].'<br />'; 
        }
    
        echo $row["contestant"].'<br />;
    }
    

    【讨论】:

    • 谢谢!非常快速的响应,你甚至提供了 PHP!
    猜你喜欢
    • 2013-03-12
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 2016-07-12
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多