PHP循环使用foreach

时间:2013-03-29 11:38:37

标签: php loops

问题在于: -

我有一个名为'MatchResults'的体育比赛结果表,其中包含以下字段

PLAYER1 Player2 Player1GamesWon Player2GamesWon Player1Pts Player2Pts league_id

首先,我正在运行一个查询,它将使用我已经拥有的存储变量过滤此表,为我提供更短的行集合: -

$qry = "SELECT * FROM BadmintonMatchResults WHERE league_id = '$leagueid'";

我需要遍历从上面的查询生成的每一行,并使用这些值来更新另一个名为'LeagueTable'的表。 LeagueTable的结构如下: -

member_id 玩过 韩元 丢失 GamesWon GamesLost 区别 点

这些更新采用多种SQL查询的形式,例如: -

$qry = mysql_query("UPDATE LeagueTable SET Played = Played + 1 WHERE member_id = '$p1id'");
$qry = mysql_query("UPDATE LeagueTable SET Played = Played + 1 WHERE member_id = '$p2id'");

if($p1pts > $p2pts) {
    $qry = mysql_query("UPDATE LeagueTable SET Won = Won + 1 WHERE member_id = '$p1id'");
    $qry = mysql_query("UPDATE LeagueTable SET Lost = Lost + 1 WHERE member_id = '$p2id'"); 
}
else if($p2pts > $p1pts) {
    $qry = mysql_query("UPDATE LeagueTable SET Won = Won + 1 WHERE member_id = '$p2id'");
    $qry = mysql_query("UPDATE LeagueTable SET Lost = Lost + 1 WHERE member_id = '$p1id'"); 
}

$qry = mysql_query("UPDATE LeagueTable SET GamesWon = GamesWon + '$p1won' WHERE member_id = '$p1id'");
$qry = mysql_query("UPDATE LeagueTable SET GamesWon = GamesWon + '$p2won' WHERE member_id = '$p2id'");  
$qry = mysql_query("UPDATE LeagueTable SET GamesLost = GamesLost + '$p1won' WHERE member_id = '$p2id'");
$qry = mysql_query("UPDATE LeagueTable SET GamesLost = GamesLost + '$p2won' WHERE member_id = '$p1id'");

$qry = mysql_query("UPDATE LeagueTable SET Difference = GamesWon - GamesLost");
$qry = mysql_query("UPDATE LeagueTable SET Points = Points + '$p1pts' WHERE member_id = '$p1id'");
$qry = mysql_query("UPDATE LeagueTable SET Points = Points + '$p2pts' WHERE member_id = '$p2id'");

忽略我所拥有的任何$​​变量,因为我目前正在对表格中输入的数据执行此操作,但是想要更改它以便它使用来自其他数据库的行。我也知道我的查询可以被压缩和组合,我的主要问题是针对不同的值集循环多次查询这一组查询。

我的问题是: -

  1. 如何在我需要运行的查询中引用第一个表中的字段?显然只是列出字段名称'Player1'是行不通的。
  2. 如何遍历每一行并运行上述2个查询以及另外8个查询。
  3. 注意:其中一些查询已经嵌套在IF语句中,因此任何循环都必须超出它。

    非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

如果您打算以这种方式执行操作,请告诉我您在SQL语句中使用数据之前清理数据。如果我输入“0”或“1 = 1”作为我的输入,并且您使用了SQL,那么SQL就不会按预期执行。

要点击然后使用参考名称从下一个文件中使用数据,您只需执行此操作:

if(mysql_num_rows($result)>0){
    while($row = mysql_fetch_assoc($result)){

        // ... your loop here code here
        mysql_query("UPDATE LeagueTable SET Played = Played + 1 WHERE member_id = '" . $row['Player1'] . "'");

    }
}

说实话,这仍然看起来你的工作方式非常低效,因为你正在努力使MySQL套接字工作。我会考虑您需要存储多少计算以及在聚合SQL查询中可以计算出多少计算。