我有一个简单的比赛注册网络表单。每位参赛者都可以选中一个方框,有资格赢得20个奖项中的一个。提交表单后,会在“参赛者”表格中创建一行。对于他们检查过的每个奖品,都会在“条目”表格中创建一行。
我正在尝试制作一个“结果”页面,列出所有奖品名称,并在每个奖品名称下面列出所有希望有资格赢得该奖项的参赛者。没有参赛者签名的奖品将不会在其名字下面列出参赛者。
如何编写高效的MySQL查询以轻松生成此类页面(使用PHP)?
参赛者
项
奖品
答案 0 :(得分:3)
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 />;
}