类似的问题(不解决我的问题):Is it possible to detect if the current while loop iteration is the last in perl?
上面的帖子有一个答案,它解决了仅在从文件中读取时检测它是否是最后一次迭代的问题。
在while循环中,是否可以检测当前迭代是否是mysql查询中的最后一个迭代?
while( my($id, $name, $email) = $sth->fetchrow_array() )
{
if(this_is_last_iteration)
{
print "last iteration";
}
}
答案 0 :(得分:2)
您需要验证此编译,但粗略概述是:
my($rows) = $sth->rows;
my($i) = 0;
while( my($id, $name, $email) = $sth->fetchrow_array() )
{
$i++;
if ($i == $rows)
{
print "last iteration";
}
}
如果您给我们更多背景信息,可能还有其他选择。例如,print
语句是while
循环中的最后一项。如果这与现实相符,你可以在循环后移动它并取消计数器。
一些评论员已正确注意到rows
命令并不总是具有SELECT命令的正确值(例如,请参阅here)。如果您正在使用SELECT
(这可能来自您的代码),那么这可能是一个问题。您可以在COUNT
之前执行SELECT
以获取行数,前提是数据集在COUNT
和SELECT
之间没有变化。
答案 1 :(得分:1)
虽然您可以计算行以告知您何时查询SQL查询的最后结果,但否,在一般情况下,无法提前知道您是否在最后一次迭代中一段时间循环。
考虑以下示例:
while (rand() > 0.05) {
say "Is this the last iteration?";
}
没有办法提前预测rand()
将返回什么,因此循环中的代码无法知道它是否会再次迭代直到下一次迭代开始。