我在页面上有一个查询,然后回显一个while循环以显示所有记录。我想将此限制为25,但也有一个动态的下一个/上一个按钮,所以我可以跳过记录。我见过类似的东西,但我无法弄清楚或找到我看到的教程。我是PHP的新手,所以任何帮助都会很棒。
<?PHP
$result = mysql_query("SELECT id, firstname, surname FROM members WHERE createdby = '" . $_SESSION['myusername'] ."'");
if (!$result) {
echo 'Could not run query: ' . mysql_error();
exit;
}
while($row = mysql_fetch_row($result))
{
$id=$row[0];
echo ("<a href=profile.php?id=$id>".$row[1]." ".$row[2]."</a>");
}
?>
答案 0 :(得分:2)
正确的解决方案是限制查询。你可以这样做(最后注意“LIMIT 50”):
$result = mysql_query("SELECT id, firstname, surname FROM members WHERE createdby = '" . $_SESSION['myusername'] ."' LIMIT 50");
您还可以通过计算来破坏PHP中的while循环:
$count = 0;
while($row = mysql_fetch_row($result)){
$id=$row[0];
echo ("<a href=profile.php?id=$id>".$row[1]." ".$row[2]."</a>");
$count++;
if ($count >= 50){
break;
}
}
同样,正确的解决方案是限制查询。原因是PHP不会将超过50个结果加载到内存中,从而节省资源,如果查询匹配,比如数据库中的一百万行。
第二个解决方案会将所有结果加载到内存中,然后当它循环遍历它们时,它将在50之后停止循环(但是所有匹配的结果仍然会被加载,但是只会使用50个,之后全部结果将再次取消)。
答案 1 :(得分:0)
您应该通过修改sql查询来执行此操作。
$offset = (int)$_GET['offset'];
$result = mysql_query("SELECT id, firstname, surname FROM members WHERE createdby = '" . $_SESSION['myusername'] ."' limit $offset, 25");
答案 2 :(得分:0)
我只有丑陋的解决方案......但是:第一个是将结果存储到会话var(数组形式)中,放入一个条件(if(!isset(session))执行查询),转换下一个和prev按钮分为两种形式,附近有一个隐藏的输入,当前页面视图值(或者它可以是总可视化的帖子,ex 25 50 75 ......)。
单击上一个/下一个按钮时,页面将被重新加载,它将打印会话[varname] [currentindex],依此类推......
否则,您可以执行jquery Ajax调用,该调用将返回包含所有记录的数组,并以这种方式管理JavaScript / jquery,您无需刷新页面。
修改
SQL限制更好但是你需要一个会话,你可以存储可视化项目的分数(25 50 75)和两个按钮形式,这样你将检查next / prev并在会话中添加或减去25并在设置之后新的MySQL限制(从会话到会话+25)