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

时间:2011-07-08 23:24:38

标签: php mysql

我希望在多次从MySQL获取数据的页面中显示相同的数据。

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

我目前正在调用mysql_fetch_assoc()两次,如下所示:

// This one is the Menu
echo '<ul class="menu">';
while( $data = mysql_fetch_assoc($query) ) { 
    echo '<li><a href="page.php?id='.$data['id'].'">'.$data['title'].'</a>';
}
echo '</ul>';

// other page contents here

// at the footer - the small sitemap
echo '<ul class="sitemap">';
while( $f_data = mysql_fetch_assoc($query) ) { 
    echo '<li><a href="page.php?id='.$f_data['id'].'">'.$f_data['title'].'</a>';
}
echo '</ul>';

我认为通过两次查询数据库,上面的代码可能会使用比所需更多的资源。由于我在页面中有数据,再次获取相同的数据是浪费内存而不是很好。

所以我的问题是:

  1. 每次使用mysql_fetch_assoc()时,它是否会发送单独的查询并从数据库中获取数据?或者它只是从数据库中获取一次数据,之后它只是循环遍历现有数组?

  2. 在我的案例中,最佳解决方案是什么?

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

7 个答案:

答案 0 :(得分:7)

您最好的解决方案是将检索到的数据存储在一个数组中,然后您可以随时使用,而无需对数据库进行更多查询,如下所示:

// 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>';

答案 1 :(得分:4)

只需参考它:)

$menu = '<ul class="menu">';
while( $data = mysql_fetch_assoc($query) )
{ 
    $menu .= '<li><a href="page.php?id='.$data['id'].'">'.$data['title'].'</a>';
}
$menu .= '</ul>';

// header 
echo $menu;


// footer
echo $menu;

答案 2 :(得分:3)

将获取的信息保存到数组中,并为菜单和页脚循环遍历此数组。

答案 3 :(得分:3)

1.不是没有。 mysql_query查询数据库,mysql_fetch_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

答案 4 :(得分:2)

为什么要对同一数据进行多次数据库调用?那是浪费资源。只需将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>';

答案 5 :(得分:1)

使用mysql_data_seek($result, 0);

它将结果集的指针设置回开头。

答案 6 :(得分:0)

使用mysqli_data_seek($ result,0)。

看起来效率更高,效果更像魅力