所以我这样做是为了检索我的整个表格:
$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;
}
}
}
答案 0 :(得分:4)
第一次查询后缓存数据:
$rows = array();
while($row=mysql_fetch_array($result) {
$rows[$row[0]] = $row;
}
然后使用以下方法访问数据:
$row = $rows[$id];
id必须是您字段中的第一个列才能生效。
答案 1 :(得分: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;
}
}
答案 2 :(得分: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
一次。