所以我这样做是为了找回我的整个桌子:
$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;
}
}
}发布于 2012-04-15 17:00:12
您可以循环遍历结果集以找到该行,然后将内部指针重新设置为第一行:
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-15 16:56:35
在第一个查询缓存数据之后:
$rows = array();
while($row=mysql_fetch_array($result) {
$rows[$row[0]] = $row;
}然后,只需使用以下方法访问数据:
$row = $rows[$id];id需要是字段中的第一列,这样才能起作用。
发布于 2012-04-15 17:24:47
假设您按照这里指定的顺序执行该操作,并且您已经知道第一次执行迭代时要查找的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上迭代一次。
https://stackoverflow.com/questions/10164035
复制相似问题