2011-01-06 52 views
9

这是我的问题。 我需要来自数据库的不止一行,并且我需要某个任务的第一行,然后再次遍历所有列表以创建一个记录集。获取mysql资源字符串的第一行?

$query = "SELECT * FROM mytable"; 
$result = mysql_query($query); 

$firstrow = //extract first row from database 
//add display some field from it 


while($row = mysql_fetch_assoc($result)) { 
    //display all of them 
} 

现在,如何提取第一行?

+0

什么是表中的第一行? – Toto 2011-01-06 12:14:56

+0

@ M42:他想清楚记录集中的第一行。 – 2011-01-06 14:23:04

回答

13

使用mysql_fetch_assoc()不仅会读取一行,还会将结果集的内部指针移动到下一行。要将结果资源重置为第一行,您需要使用mysql_data_seek()。

$query = "SELECT * FROM mytable"; 
$result = mysql_query($query); 

$firstrow = mysql_fetch_assoc($result); 

// reset the result resource 
mysql_data_seek($result, 0); 


while($row = mysql_fetch_assoc($result)) { 
    //display all of them 
} 
+0

效率如何。当你已经提取它时,为什么你会想要进行查找操作并再次检索第一行? – 2011-01-06 14:22:31

+0

你需要问@mrNepal他为什么要这样做。可能有一个很好的理由。另一方面,如果没有特别的理由,我同意这不是最佳方法。我简单地回答了这个问题。 – 2011-01-06 14:38:03

+0

我无法理解为什么downvote。这是我的问题的完美答案。我之所以需要第一行然后重新运行结果,是因为我正在使用相同的结果集1)显示完整内容和2)显示其他相关内容。 – mrN 2011-01-12 06:15:41

0

每当您拨打mysql_fetch_assoc($result)时,您都会得到一排。因此,而不是在一个循环反复这样做,只是做了一次:

$result = mysql_query("..."); 
if ($row = mysql_fetch_assoc($result)) { 
    $firstRow = $row; 

    while ($row = mysql_fetch_assoc($result)) { 
     // all the rest 
    } 
} 

免责声明:这可能是更漂亮的代码,但你的想法!

+0

不,它没有工作....同时也只提取一行 – mrN 2011-01-06 12:50:14

+0

确实,Tomalak忘记重置内部指针。 – Andrew 2011-01-06 14:09:36

+0

@ Andrew:恩?什么是内部指针。我不明白为什么这个片段不应该工作。 – 2011-01-06 14:21:13

1

如果您想再次获得所有从第一个行,然后尝试以下

$query = "SELECT * FROM mytable"; 
$result = mysql_query($query); 

if ($row = mysql_fetch_assoc ($result){ 
    $firstRow = $row; 
    mysql_data_seek($result, 0); 

    while($row = mysql_fetch_assoc($result)) { 
     //display all of them 
    } 
} 

更多关于mysql_data_seek这里:PHP: mysql_data_seek - Manual

+0

+1,感谢您的帮助 – mrN 2011-01-06 12:59:39

+0

与David相同的评论。 – 2011-01-06 14:23:40

+0

与之前的回答相同的评论。 – mrN 2011-01-12 06:39:13