我希望在多次从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>';
我认为通过两次查询数据库,上面的代码可能会使用比所需更多的资源。由于我在页面中有数据,再次获取相同的数据是浪费内存而不是很好。
所以我的问题是:
每次使用mysql_fetch_assoc()
时,它是否会发送单独的查询并从数据库中获取数据?或者它只是从数据库中获取一次数据,之后它只是循环遍历现有数组?
在我的案例中,最佳解决方案是什么?
简单 - 我是以最好的方式做到这一点的吗?有没有更好的方法来做到这一点,不浪费内存/资源/时间?因为它是我显示两次的相同数据。
答案 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)。
看起来效率更高,效果更像魅力