我如何控制while循环进入另一个while循环

时间:2009-11-30 18:28:44

标签: php loops while-loop

假设我有一个while循环:

$sql = mysql_query("SELECT * FROM tablename");
while($row = mysql_fetch_array($sql)){

  $id = $row["id"];
  $sql_2 = mysql_query("SELECT * FROM secondtable WHERE id != $id ");
  while($ro = mysql_fetch_array($sql_2)){
   $id2 = $ro["id2"];
   echo $id2;
   }

}

然后,如果第一个查询返回5个结果,即1-5,第二个查询返回3个结果,如果我想回显第二个查询,它给我这样..........

111112222233333

我怎么能修复123以便第二个while循环应该根据我允许的次数执行........ !!我怎么能这样做......... !!

5 个答案:

答案 0 :(得分:1)

我不确定我是否100%理解你的问题 - 这有点不清楚。

您可以使用GROUP BY子句

在查询中解决此问题
$sql_2 = mysql_query("SELECT id FROM secondtable WHERE id != $id GROUP BY id");

但只有当您需要 secondtable.id而不是任何其他列时,这才有效。

当你说“我允许的时间数量”时,你的意思是某种任意价值吗?如果是这样,那么你需要使用不同的循环机制,例如Greg B的解决方案。

答案 1 :(得分:0)

$sql = mysql_query("SELECT * FROM tablename");
$tmp = array();
while($row = mysql_fetch_array($sql)){

    $id = $row["id"];
    if(!in_array($id, $tmp)) {  
        $sql_2 = mysql_query("SELECT * FROM secondtable WHERE id != $id ");
        while($ro = mysql_fetch_array($sql_2)){
            $id2 = $ro["id2"];
            echo $id2;
        }
        $tmp[] = $id;
    }
}

将所有查询的$ id保存在数组中,以检查下一次迭代是否已被查询。我也认为对第一个查询结果进行GROUPING是一种更好的方法。

答案 2 :(得分:0)

您是否要显式限制内循环的迭代次数?

您是否考虑过使用for循环?

$sql = mysql_query("SELECT * FROM tablename");

while($row = mysql_fetch_array($sql)){
    $id = $row["id"];
    $sql_2 = mysql_query("SELECT * FROM secondtable WHERE id != $id ");

    for($i=0; $i<3; $i++){
       $ro = mysql_fetch_array($sql_2);
       $id2 = $ro["id2"];
       echo $id2;
    }
}

答案 3 :(得分:0)

你的第一个while循环遍历所有5个结果,一次一个。

你的第二个while循环遍历5个结果中的每个结果,产生它自己的一组结果(即5个迭代中每个结果的3个结果,总计15个结果)。

我相信您要做的是从第二个查询中排除第一个循环中找到的所有ID。你可以这样做:

$sql = mysql_query("SELECT * FROM tablename");
$exclude = array();
while($row = mysql_fetch_array($sql)) {
    array_push($exclude, $row['id']);
}

// simplify query if no results found
$where = '';
if (!empty($exclude)) {
    $where = sprintf(' WHERE id NOT IN (%s)', implode(',', $exclude));
}

$sql = sprintf('SELECT * FROM secondtable%s', $where);
while($row = mysql_fetch_array($sql_2)) {
   $id2 = $row["id2"];
   echo $id2;
}

答案 4 :(得分:0)

我同意莱昂纳多·埃雷拉的看法,你们在这里要问的是什么并不清楚。如果您可以重写您的问题,这将有所帮助。这听起来有点像你试图查询一个表而不包括在另一个表中找到的id。你可能会尝试类似的东西:

SELECT * FROM secondtable t2
WHERE NOT EXISTS (SELECT 1 FROM tablename t1 WHERE t1.id = t2.id);
相关问题