这就是事情。
我正在参加比赛,我公司的人可以预测世界杯比赛。
对于每个游戏,他们可以选择无线电选项,赢家或平局(选项/值为1,2,3)。
Brasil tie Croacia
所有这些都存储在名为“predictions”的表中,其中存储了id,name,match1,match2等......
然后我有另一张名为“results”的表格,我会在每场比赛结束后存储正确的值(例如匹配1 = 1)
现在我想比较两个表中的match1字段,如果它们匹配,则得到一个点。
是不是有人这样做了?答案 0 :(得分:1)
不要将每个匹配存储在不同的列中。它们应该是单独的行,匹配编号位于match
列中。然后你可以这样写一个连接:
SELECT p.name, p.match, p.result = r.result AS correct
FROM predictions AS p
JOIN results AS r ON p.match = r.match
ORDER BY p.name, p.match
要获得所有人的积分,您可以汇总:
SELECT p.name, SUM(p.result = r.result) AS points
FROM predictions AS p
JOIN results AS r ON p.match = r.match
GROUP BY p.name
ORDER BY p.name
要将预测插入数据库,请使用循环:
foreach($_REQUEST['match'] AS $i => $match) {
mysql_query("INSERT INTO mundial (nombre, match, p)
VALUES ('$_REQUEST[nombre]', $match, {$_REQUEST['p'][$i]})") or die(mysql_error());
}
预测表单的HTML应如下所示:
<form>
<input type="hidden" name="match[0]" value="1">
<input type="radio" name="p[0]" value="1"> Brasil <input type="radio" name="p[0]" value="2"> Croacia <input type="radio" name="p[0]" value="3"> Tie
<br/>
<input type="hidden" name="match[1]" value="2">
<input type="radio" name="p[1]" value="1"> Country3 <input type="radio" name="p[1]" value="2"> Country4 <input type="radio" name="p[1]" value="3"> Tie
<br/>
... Repeat for each match
</form>
答案 1 :(得分:0)
我建议采用另一种方法:使用行代替列,然后JOIN
使用&#39;结果&#39;表格获取每个用户的得分。
在行方法中,predictions
表将包含以下列:id
,match_id
,match_guess
,因此每个用户都会向该表贡献几行,例如如果用户123猜测match_1的结果将为2,则这对应于行(123, 'match_1', 2)
。
&#39;结果&#39;表格包含match_id
,match_result
列,然后只需JOIN
来计算每个用户的点数,例如
SELECT p.id, SUM(p.match_guess=r.match_result)
FROM predictions p, results r
WHERE p.match_id=r.match_id
GROUP BY p.id;