嵌套while循环不工作?

时间:2013-02-05 02:21:51

标签: php mysql

我对php有“无意义”的问题。第一个循环应该从表中获取某个记录,并将其与第二个表中的所有记录进行比较......

所以我希望它能在每个“1st”之后打印41“2nd”。由于第二张表中有41条记录。但是,while循环第一次工作,然后忽略第二个while循环。

我得到的结果:

1st2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd2nd1st1st1st1st1st1st1st1st1st1st1st1st1st1st1st1st1st1st1st1st1st1st1st1st1 ...

while($row = mysql_fetch_array($select))
{
    echo "1st";
    while($row2 = mysql_fetch_array($select2))
    {
        echo "2nd";
        $string = $row2["header"];
        $find = $row["email"];
        if(strstr($string, $find)) {
            $email = $row["email"];
            echo "found it";
        } else {
            //no email found
        }
    }
}

4 个答案:

答案 0 :(得分:1)

您需要在进入内循环之前执行第二个查询:


    while($row=mysql_fetch_array($select))
    {
        echo "1st";

        $select2 = mysql_query("select ...");

        while($row2=mysql_fetch_array($select2))
        {

最好是在开始第一个循环之前运行第二个查询,并将记录保存到另一个数组。然后你可以避免n ^ 2个查询:


    $emailToRecord = array();
    $select2 = mysql_query("select ...");
    while($row2=mysql_fetch_array($select2)) {
       $emailToRecord[$row2["header"]] = $row2;
    }

    while($row=mysql_fetch_array($select))
    {
        echo "1st";
        $find = $row["email"];
        if (isset($emailToRecord[$find])) {
               echo "found it";
        }
    }

答案 1 :(得分:0)

除非两个查询中的行数相同,否则不会发布相同的行。
你可以添加查询($ select和$ select2)吗?

有人可以告诉我如何发表评论而不是答案吗?

<?php
    $select=mysql_query("SELECT email FROM database.tablename"); 
    $select2=mysql_query("SELECT header FROM database2.tablename2");

    while($row=mysql_fetch_assoc($select))
    {
        echo "1st";
        $find = $row["email"];
        while($row2=mysql_fetch_assoc($select2))
        {
            echo "2nd";
            $string = $row2["header"];
            if(strstr($string, $find))
            {
                $email=$find;
                echo "found it";
            }
             else
            {
                  //no email found
            }

        }
    }

答案 2 :(得分:0)

我希望这是有道理的。

这是因为第一个while执行然后第二个while循环并且直到它完成才结束,然后它结束并返回到第一个while而它返回true(另一行)并执行并转到下一个while ,但它指向当前“行”的指针已到达结尾,因此它不会执行,它主要只是主循环。这就是为什么你得到122222221111111

答案 3 :(得分:0)

不要在另一个while循环中运行mysql_fetch_array。首先提取所有数据并比较两个表的结果。

$select=mysql_query("SELECT email FROM database.tablename");
$select2=mysql_query("SELECT header FROM database2.tablename2");    
while($row=mysql_fetch_array($select)) {
    $first[] = $row["email"];
}
while($row2=mysql_fetch_array($select2)) {
    $second[] = $row2["header"];
}
foreach ($first as $item) {
    if (($key = array_search($item, $second)) !== false) {
        $email[] = $second[$key];
    }
}
print_r($email); // Get all the emails that exist in both tables.