0

我在页面上有一个查询,然后它会回显一个 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>");
}
?>
4

3 回答 3

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,之后所有结果都将是再次取消设置)。

于 2013-02-27T20:09:35.017 回答
0

您应该通过修改 sql 查询来做到这一点。

$offset = (int)$_GET['offset'];
$result = mysql_query("SELECT id, firstname, surname FROM members WHERE createdby = '" . $_SESSION['myusername'] ."' limit $offset, 25");
于 2013-02-27T20:02:06.430 回答
0

我只有丑陋的解决方案......但是:第一个是将结果存储到会话变量(数组形式)中,放置一个条件(如果(!isset(会话))执行查询),将下一个和上一个按钮转换为两个具有当前页面视图值的隐藏输入附近的表单(或者它可以是总的可视化帖子,例如 25 50 75...)。当您单击上一个/下一个按钮时,页面将被重新加载并打印 session[varname][currentindex] 等等...否则您可以执行 jquery Ajax 调用,该调用将返回一个包含所有记录的数组和以这种方式管理它 JavaScript/jquery,您无需刷新页面。
编辑
SQL 限制更好,但是您需要一个会话来存储可视化项目的一部分(25 50 75)和两个按钮表单,这样您将检查下一个/上一个,并在会话和设置后添加或减去 25新的 MySQL 限制(从会话到会话+25)

于 2013-02-27T20:12:43.270 回答