-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 ドライバーにも、そのような機能はありません。

したがって、「外部」カウンターを使用するだけです。問題は1つもありません。

切り替え方法については、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* 番目の行をフェッチする理由はありません。この関数は、行を順不同でフェッチする場合 (結果セットをスキップまたはバックアップする場合) に役立ちます。

于 2013-05-03T15:08:57.627 に答える