2

所以我这样做是为了检索我的整个表:

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

然后,在我的 PHP 页面的另一部分,我执行另一个查询(针对特定行):

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

所以,我正在执行两个查询。但是,我真的不必那样做,不是吗?我的意思是,我在第二个查询中检索的行已经存在$result(我的第一个查询的结果),因为它包含我的整个表。

因此,我不想进行第二个查询,而是$result直接从中提取所需的行(同时保持$result其自身的机智)。

我该怎么做?


好的,这就是我实现它的方式:

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;
    }

如果您只需要取出一行,这将是最快的方法,因为您只需迭代$result一次。

于 2012-04-15T17:24:47.840 回答