【问题标题】:Conditional of a loop within a loop is not matching循环内循环的条件不匹配
【发布时间】:2010-08-14 15:35:57
【问题描述】:

我有两个数据库,每个数据库都包含用户的电子邮件地址。我编写了一个脚本,其唯一目的是查看两个数据库中存在哪些电子邮件地址。

话虽如此,请看下面的循环。每个循环包含数百条记录(我已打印出每个记录的结果作为验证)。但是,当条件找到匹配项时,条件仅与第一个匹配项中的电子邮件地址匹配。它仍然“卡在”与初始查询匹配的一条记录上。换句话说,如果它在“test@test.com”上匹配,那么所有未来的比较都是针对“test@test.com”。这几乎就像我需要一个“next()”方法来从第一个数组中移动东西。

FWIW,我是一个完整的 PHP 菜鸟,所以我确定我在这里缺少一些明显的东西。

while($member = mysql_fetch_array($members)){
    while($emailAddress = mysql_fetch_array($emailAddresses)){
        if ($member['email'] == $emailAddress['email']){
            echo $member['email'] . "<br/>";
        }
    }
}

【问题讨论】:

  • 这两个数据库是否存在于同一台服务器上?您可以使用完整的限定表名创建一个跨越两者的查询。
  • 您实际上有两个数据库,还是您在同一个数据库中只有两个表?您可以编辑以包含您的sql吗?正如 Willi 所说,这可能比做这些嵌套循环要容易得多。
  • 两个独立的数据库,两个独立的服务器。

标签: php mysql


【解决方案1】:

我认为问题在于你循环通过一个 mysql-result 集,有一个内部数据指针在每个循环中保持向上滑动 1 步。

尝试先将结果放入数组中。

$adresses = array();
while($emailAddress = mysql_fetch_array($emailAddresses)){
    $adresses[] = $emailAddress['email'] ; 
    }

然后在数组中检查你的结果

while($member = mysql_fetch_array($members)){
   if(in_array($member['email'], $adresses)){
     echo $member['email'];
     }
   }

或者您可以在每次循环后重置数据指针,不确定是否可以在 mysql 结果上执行此操作,但它在遍历数组时有效。

【讨论】:

    猜你喜欢
    • 2016-02-23
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 2016-04-24
    • 2014-08-13
    相关资源
    最近更新 更多