比较数据mysql的2个表中的行与php

时间:2014-05-08 18:16:05

标签: php mysql

这就是事情。

我正在参加比赛,我公司的人可以预测世界杯比赛。

对于每个游戏,他们可以选择无线电选项,赢家或平局(选项/值为1,2,3)。

Brasil tie Croacia

所有这些都存储在名为“predictions”的表中,其中存储了id,name,match1,match2等......

然后我有另一张名为“results”的表格,我会在每场比赛结束后存储正确的值(例如匹配1 = 1)

现在我想比较两个表中的match1字段,如果它们匹配,则得到一个点。

是不是有人这样做了?

2 个答案:

答案 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表将包含以下列:idmatch_idmatch_guess,因此每个用户都会向该表贡献几行,例如如果用户123猜测match_1的结果将为2,则这对应于行(123, 'match_1', 2)

&#39;结果&#39;表格包含match_idmatch_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;