Php 在一个页面中多次获取相同数据的最佳方法是什么?

Php 在一个页面中多次获取相同数据的最佳方法是什么?,php,mysql,Php,Mysql,我想在一个页面中显示相同的数据,该页面多次从MySQL获取数据 首先,我想在while循环中使用MySQL\u fetch\u assoc()从MySQL获取数据,然后将其显示为菜单。第二次我想在页脚中显示与站点地图相同的数据 我目前正在调用mysql\u fetch\u assoc()两次,如下所示: //这是菜单 echo'; 而($data=mysql\u fetch\u assoc($query)){ 回音“”; } 回声“”; //其他页面内容在这里 //在页脚-小型站点地图 echo

我想在一个页面中显示相同的数据,该页面多次从MySQL获取数据

首先,我想在while循环中使用
MySQL\u fetch\u assoc()
从MySQL获取数据,然后将其显示为菜单。第二次我想在页脚中显示与站点地图相同的数据

我目前正在调用mysql\u fetch\u assoc()两次,如下所示:

//这是菜单
echo'
    ; 而($data=mysql\u fetch\u assoc($query)){ 回音“
  • ”; } 回声“
”; //其他页面内容在这里 //在页脚-小型站点地图 echo'
    ; 而($f_data=mysql_fetch_assoc($query)){ 回音“
  • ”; } 回声“
”;
我认为上面的代码可能使用了比查询数据库两次所需的更多的资源。由于我在页面中有数据,再次获取相同的数据是在浪费内存,这是不好的

因此,我的问题是:

  • 每次我使用
    mysql\u fetch\u assoc()
    ,它是否会发送单独的查询并从数据库中获取数据?或者它只是从数据库中获取一次数据,然后它只是在现有数组中循环

  • 在我的情况下,什么是最好的解决方案


  • 简单地说,我是以最好的方式来做这件事的吗?有没有更好的方法做到这一点,不浪费内存/资源/时间?因为它是相同的数据,我显示了两次。

    只要参考一下它:)

    $menu='
      ; while($data=mysql\u fetch\u assoc($query)) { $menu.='
    • '; } $menu.='
    '; //标题 echo$菜单; //页脚 echo$菜单;
    将获取的信息保存到一个数组中,并在该数组中循环搜索菜单和页脚。

    1。不,它没有
    mysql\u query
    查询数据库,并使用
    mysql\u fetch\u assoc
    过滤返回的结果集

    2.有一个更简单的解决方案:

    $output = "";
    while( $data = mysql_fetch_assoc($query) )
        $output .= "<li><a href='page.php?id={$data['id']}'>{$data['title']}</a></li>";
    
    echo "<ul class='menu'>{$output}</ul>"; // This one is the Menu
    // other page contents here
    echo "<ul class='sitemap'>{$output}</ul>"; // at the footer - the small sitemap
    
    $output=”“;
    while($data=mysql\u fetch\u assoc($query))
    $output.=“
  • ”; echo“”;//这是菜单 //其他页面内容在这里 echo“
      {$output}
    ”;//在页脚-小型站点地图
    您最好的解决方案是将检索到的数据存储在一个数组中,然后您可以随时使用该数组,而无需对数据库进行更多查询,如下所示:

    // First we make the query and store the rows in an array
    $result = mysql_query($query);
    $data_array = array();
    while ($data = mysql_fetch_assoc($result)) {
        $data_array[] = $data;
    }
    
    // Then we can loop through the values in that array without making further queries
    echo '<ul class="menu">';
    foreach ($data_array as $data) {
        echo '<li><a href="page.php?id=', $data['id'], '">', $data['title'], '</a>';
    }
    echo '</ul>';
    
    // Another loop through our array
    echo '<ul class="sitemap">';
    foreach ($data_array as $f_data) {
        echo '<li><a href="page.php?id=', $f_data['id'], '">', $f_data['title'], '</a>';
    }
    echo '</ul>';
    
    //首先我们进行查询并将行存储在数组中
    $result=mysql\u query($query);
    $data_array=array();
    而($data=mysql\u fetch\u assoc($result)){
    $data_数组[]=$data;
    }
    //然后,我们可以循环该数组中的值,而无需进一步查询
    echo'
      ; foreach($data\u数组作为$data){ 回音“
    • ”; } 回声“
    ”; //另一个循环通过我们的阵列 echo'
      ; foreach($data\u数组作为$f\u数据){ 回音“
    • ”; } 回声“
    ”;
    为什么要对同一数据进行多个db调用?那是浪费资源。只需将db数据保存到一个数组中,然后将其输出到您喜欢的任何地方

    试试这个:

      while( $data = mysql_fetch_assoc($query) )
        $menu[$data['id']] = $data['title'];
    
      // This one is the Menu
      echo '<ul class="menu">';
    
      foreach ($menu AS $id => $title)
        echo "<li><a href='page.php?id=$id'>$title</a></li>";
    
      echo '</ul>';
    
      // other page contents here
    
      // at the footer - the small sitemap
      echo '<ul class="sitemap">';
    
      foreach ($menu AS $id => $title)
        echo "<li><a href='page.php?id=$id'>$title</a></li>";
    
      echo '</ul>';
    
    while($data=mysql\u fetch\u assoc($query))
    $menu[$data['id']=$data['title'];
    //这是菜单
    echo'
      ; foreach($id=>$title的菜单) 回声“
    • ”; 回声“
    ”; //其他页面内容在这里 //在页脚-小型站点地图 echo'
      ; foreach($id=>$title的菜单) 回声“
    • ”; 回声“
    ”;
    使用
    mysql\u data\u seek($result,0)

    它将结果集的指针设置回起始位置。

    使用mysqli_data_seek($result,0)


    看起来效率更高,工作起来更像一个符咒

    注意,OP希望在每个
    元素上放置不同的类。这里使用两个变量
    $menu
    $sitemap
    启动列表,并将其内部(循环)引用为类似
    $list
    的内容,即可轻松实现。然后只需
    echo$菜单$列表“”啊,抓到了。实际上我只是做一个div包装
      。。。。和
        。。。然后CSS可以是#sitemap ul和#menu ulth这一个可以工作,但我认为将数据存储到数组中是一个更好的主意,因此我可以以更定制的方式使用它们。如果不这样做,
        mysql_fetch_assoc
        还会浪费资源吗?这就是为什么我要求确定并知道更好的方法。谢谢你的回答。
          while( $data = mysql_fetch_assoc($query) )
            $menu[$data['id']] = $data['title'];
        
          // This one is the Menu
          echo '<ul class="menu">';
        
          foreach ($menu AS $id => $title)
            echo "<li><a href='page.php?id=$id'>$title</a></li>";
        
          echo '</ul>';
        
          // other page contents here
        
          // at the footer - the small sitemap
          echo '<ul class="sitemap">';
        
          foreach ($menu AS $id => $title)
            echo "<li><a href='page.php?id=$id'>$title</a></li>";
        
          echo '</ul>';