-2

在 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 需要输入另一个变量。

4

2 回答 2

3

mysql DB 和 mysqli 驱动程序都没有这样的功能。

因此,只需使用“外部”计数器 - 它没有一个问题。

关于切换方式,我建议你切换到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 ?>
于 2013-05-03T14:48:29.777 回答
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*th 行。如果您想乱序获取行,在结果集中跳过或备份,该函数很有用。

于 2013-05-03T15:08:57.627 回答