【问题标题】: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 />;
}