【问题标题】:Getting the first row of the mysql resource string?获取mysql资源字符串的第一行?
【发布时间】:2011-01-06 11:52:29
【问题描述】:

这是我的问题。 我需要数据库中的多行,并且我需要第一行来完成某些任务,然后再次遍历所有列表以创建记录集。

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

现在,如何只提取第一行?

【问题讨论】:

  • 表格的第一行是什么?
  • @M42:很明显,他想要记录集中的第一行。

标签: php mysql database


【解决方案1】:

你可以使用面向对象的风格

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

if ( $row = $result->fetch_assoc()){
    $firstRow = $row;
    mysql_data_seek($result, 0);

    while( $row = $result->fetch_assoc()) {
       //display all of them
    }
}

【讨论】:

    【解决方案2】:

    使用 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
    }
    

    【讨论】:

    • 效率低下。既然已经提取了第一行,为什么还要进行查找操作并再次检索它?
    • 您需要询问@mrNepal 他为什么要这样做。可能有一个很好的理由。另一方面,如果没有特别的原因,我同意这不是最佳方法。我只是按原样回答了问题。
    • 我不明白为什么投反对票。这是我的问题的完美答案。我之所以需要第一行,然后重新运行结果,是因为我使用相同的结果集 1)显示完整内容和 2)显示其他相关内容。
    • @mrNepal:很高兴你得到了你想要的东西,但可能值得看看你得到的其他一些答案,并想知道你是否可能缺少一些东西。
    • 是的...我已经看到了所有的答案,下一个答案几乎相同,您的答案对我不起作用。这是我尝试实施的第一个答案,但是......它没有用。
    【解决方案3】:

    如果您想再次获取第一行中的所有行,请尝试以下操作

    $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

    【讨论】:

    • 与之前的答案相同的评论。
    【解决方案4】:

    每次您拨打mysql_fetch_assoc($result),您都会得到一行。因此,不要在循环中重复执行,只需执行一次即可:

    $result = mysql_query("...");
    if ($row = mysql_fetch_assoc($result)) {
       $firstRow = $row;
    
       while ($row = mysql_fetch_assoc($result)) {
           // all the rest
       }
    }
    

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

    【讨论】:

    • @Andrew:嗯?什么内部指针。我不明白为什么这个 sn-p 不应该工作。
    • 哦,出于某种原因,您想再次执行第一行;我在你原来的问题中错过了这一点。继续浏览列表会大大提高效率。你已经有了第一行;为什么要再次检索它???
    • -1,你为什么不值得投反对票,你的解决方案对我不起作用。自己试试。而且我认为,如果这是对问题的错误/不正确的解决方案,您应该对答案投反对票。
    • @mrNepal:这不是“错误/不正确”;这是解决您试图解决的更广泛问题的最佳方法。您首先提出问题的事实使您没有资格做出其他决定。你的反对意见很粗鲁。我很高兴能花时间帮助你。祝你未来好运。
    • 不,你投反对票是不礼貌的。我投了反对票,因为你的解决方案在我的情况下不起作用....
    猜你喜欢
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 2011-05-24
    • 1970-01-01
    相关资源
    最近更新 更多