2

したがって、これを実行してテーブル全体を取得します。

$result = mysql_query( 'SELECT * FROM mytable' );

次に、PHPページの別の部分で、(特定の行に対して)別のクエリを実行します。

$result2 = mysql_query( 'SELECT * FROM mytable WHERE id = ' . $id );
$row = mysql_fetch_array( $result2 );

したがって、2つのクエリを実行しています。しかし、私は本当にそれをする必要はありませんね?つまり、2番目のクエリで取得している行は$result、テーブル全体が含まれているため、(最初のクエリの結果)にすでに存在しています。

$resultしたがって、2番目のクエリを実行する代わりに、目的の行を直接(そのままの状態で)抽出したいと思います$result

どうすればいいですか?


OK、これが私がそれを実装した方法です:

function getRowById ( $result, $id )
{
    while ( $row = mysql_fetch_array( $result ) ) {
        if ( $row['id'] == $id ) {
            mysql_data_seek( $result, 0 );
            return $row;
        }
    }
}
4

3 に答える 3

4

最初のクエリがデータをキャッシュした後:

$rows = array();
while($row=mysql_fetch_array($result) {
    $rows[$row[0]] = $row;
}

次に、以下を使用してデータにアクセスします。

$row = $rows[$id];

これを機能させるには、idをフィールドの最初の列にする必要があります。

于 2012-04-15T16:56:35.493 に答える
2

結果セットをループして行を見つけてから、内部ポインタを最初の行にリセットできます。

while($row = mysql_fetch_array( $result))
{
  if($row['id'] == $id)
  {
    //row found, do processing ...
    //reset pointer and break from loop
    if(!mysql_data_seek($result, 0))
      //handle error
    break;
  }
}
于 2012-04-15T17:00:12.313 に答える
1

ここで指定した順序で実行し、最初に反復を実行するときに検索するIDがすでにわかっている場合は、そこから値を保存するだけで済みます。

したがって、スクリプトのどこかで次のようなことを行います

while ( $row = mysql_fetch_array( $result ) ) {
    // process data
}

そのループでは、IDを確認して、後で使用できるように保存することができます。

while ( $row = mysql_fetch_array( $result ) ) {
        // process data
        if ($row['id'] == $id) $importantid = $row;
    }

1回だけ繰り返す必要があるため、1行だけを取得する必要がある場合は、これが最速のアプローチになります$result

于 2012-04-15T17:24:47.840 に答える