如何在mysql_fetch_assoc()中循环时获取行索引计数?
我不想使用这样的外部计数器:
$counter= 0;
while($row = mysql_fetch_assoc($result)) {
echo 'Row '.$counter;
$counter ++;
}
是否有内置的MySQL函数来获取循环中的当前行索引?
编辑:
我不想使用外部变量的原因是我从使用一种方法切换到另一种方法来循环遍历一组MySQL结果。
我正在使用:
$result = mysql_query("SELECT * FROM table");
$num = mysql_num_rows($result);
for($x=0;$x < $num;$x++){
echo 'Row '.$x;
// $field = mysql_result($result,$x)
}
现在是上面的MySQL_fetch_assoc()方法。
我主要是为了保持每个人的最简单。 for方法可以很容易地跟踪行索引,但MySQL_fetch_assoc需要输入另一个变量。
答案 0 :(得分:3)
mysql DB和mysqli驱动程序都没有这样的功能。
所以,只需使用&#34; extrenal&#34;反击 - 没有一个问题。
关于切换方法,我建议您切换到PDO。它显然满足了您对更简单,更清晰的代码的渴望:
$stm = $pdo->prepare("SELECT * FROM table");
$stm->execute();
$data = $stm->fetchAll();
?>
<table>
<? foreach ($data as $i => $row): ?>
<tr>
<td><?=$i+1?></td>
<td>
<a href="news.php?<?=$row['id']?>">
<?=$row['title']?>
</a>
</td>
</tr>
<? endforeach ?>
答案 1 :(得分:1)
我同意其他人的观点,这似乎是一种人为的要求。
我能想到的唯一选择是在SQL查询中构建行计数:
SELECT (@row:=@row+1) AS rownum, m.*
FROM (SELECT @row:=0) AS _init
STRAIGHT_JOIN mytable AS m
WHERE ...
但这似乎比简单地使用PHP变量来计算更复杂。
重新编辑:
您可以使用for循环以及mysql_fetch_assoc():
$result = mysql_query("SELECT * FROM table");
$num = mysql_num_rows($result);
for($x=0;$x < $num;$x++){
echo 'Row '.$x;
$row = mysql_fetch_assoc($result);
}
由于无论如何都是按顺序提取行,因此没有理由使用mysql_result()来获取* n *行。如果您想要在结果集中跳过或备份无序地获取行,那么该函数非常有用。
答案 2 :(得分:0)
不,没有这样的内置功能。<br/> 当两行代码完成工作时,为什么还需要一个函数?