我使用php和mysqli从mysql中提取一些数据,我很惊讶这段代码可以正常工作。
<?php
$mysqli = new mysqli("localhost", "root", "", "test");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$result = $mysqli->query("select subscriber_number from r4_subscriber_choices");
/*
500 Records Here
*/
$ac = 'acc';
$i = 0;
while($row = $result->fetch_array())
{
$n = $row['subscriber_number'];
//echo $i++ . ' ' .$row['subscriber_number'] . '<br/>';
$new_q = $mysqli->query("select text_message from incoming_sms where dest_msisdn = $n and text_message like '%acc%'");
while($row2 = $new_q->fetch_array()){
echo $i++ . ' ' .$row2['text_message'] . '<br/>';
}
}
$result->close()
?>
外部while循环500条记录,而内部循环57.在我看来,我期待内循环也循环500次,因为它在外循环内部循环500次但只有57次。
有人可以解释为什么会这样吗?。
答案 0 :(得分:1)
不,它没有运行57次。它运行的次数与外循环的次数相同。只有你的回声在第二个循环中,它只有57个外部记录的行。试试这个
while($row2 = $new_q->fetch_array()){
// echo $i++ . ' ' .$row2['text_message'] . '<br/>';
}
echo $i++;
对于内部查询返回0行的外部循环的所有行,您不会看到echo
,因为只有在内部循环也有行时才会执行echo
。就是这样。尝试在内循环之外使用虚拟回声,并且您将看到内部查询被执行多次。
答案 1 :(得分:0)
如果您的第一个查询中有500个结果,那么显然您的外部循环将迭代500次。你已经有了。为您的&#34;内部查询&#34;返回内部循环循环以返回多个记录。内循环开始和停止至少与外循环一样多次。
例如。如果外部查询中有500行,并且每个500内部查询中有50条记录,那么内部循环将一起迭代25000次。
答案 2 :(得分:-1)
也许第二次并不总是结果。如果$ new_q没有结果或查询无效,则不执行第二次while中的echo。