【问题标题】:mysql LIMIT and retrieve rows constantly [duplicate]mysql LIMIT 并不断检索行[重复]
【发布时间】:2014-06-02 06:38:01
【问题描述】:

我将为我的数据库类(数据库中的新内容)做一个项目。我将使用 php。这些表是在 mysql 中创建的。我必须显示一个包含一些信息的网页:

attr1 | atrr2 | atrr3 | atrr4 
      |       |       |
      |       |       |

但我想显示最后插入的 20 行。然后,如果用户想查看插入的其他行,网页将有一个下一页按钮,显示以下 20 行(不是相同的行)。

我知道我可以使用类似的东西:

select (attributes) from tbl ORDER BY 'ID' DESC LIMIT 20

1- 但是,我如何检索(使用 php 编程)其他 20 行?如果我使用相同的查询,它将显示相同的信息。

2- 我想查询所有数据并以某种方式存储它,但我不知道存储所有数据是否是一个好的选择,即使用户不想看到它。我想将其作为我的第一个问题,因为我必须从数据库中的其他表中检索其他信息。

你有什么建议?以及如何在第一个问题中根据需要检索数据?

【问题讨论】:

  • LIMIT,OFFSET 部分的dev.mysql.com/doc/refman/5.0/en/select.html 是您所需要的。请注意,您的 order by 目前并未达到您的预期。 ID 应该被单引号引用为'ID'。这被解释为字符串文字,尽管在语法上有效并不会产生您期望的结果。
  • 所以它将从 tbl ORDER BY ID DESC LIMIT 20 中选择(属性)?

标签: php mysql sql


【解决方案1】:

我最近在一个项目中制作了其中一个。我使用了Bootstrap pagination class 来设置样式:

<div class="pagination" style="text-align:center">
<ul>

<?php

        if($firstPage)
        {
            $relative = "./";
        }
        else
            $relative = "../";

        if($page != 1)
        {
            echo "<li><a href=\"".$relative."page/$page\">&laquo;</a></li>";
        }
        for($i = 1; $i <= ceil($numRows / $numItems); $i++)
        {
            if($i == $page)
                echo "\t<li><a href=\"".$relative."page/$i"."\" style=\"background-color:#e5e5e5;color:#AAAAAA;\"><b>".$i."</b></a></li>";
            else
                echo "\t<li><a href=\"".$relative."page/$i\">".$i."</a></li>";
        }
        if(($page+1) <= ceil($numRows / $numItems))
            echo "\t<li><a href=\"".$relative."page/".($page+1)."\">&raquo;</a></li>";
?>
</ul>
</div>

然后在控制器中,我形成查询:

$numItems = 20;  // Number of results to show per page
$q = "SELECT * FROM --- WHERE ---- = $-----";
$q .= " LIMIT ".(($page_number-1)*$numItems).','.($numItems*($page_number));

【讨论】:

  • 嗨,亚历克斯,感谢分享。我有一些问题:控制器是什么意思?你能解释一下你的代码吗? for 循环?
  • @Edwardo 这是当网络浏览器请求带有 /page/xxx 的 URL 时调用的函数,其中 x 是数字
  • 很抱歉再次打扰您,Alex,但我怎么知道我在哪一页呢?我如何使用 $_GET 来做到这一点?例如,我有一个名为 main.php 的页面,当用户单击(选择)第 2 页时,我如何在同一页面中获取页面编号(例如 2)?救命!
  • @Edwardo 在您的链接 URL 中,输入 main.php?page=2 然后在您的 PHP 中您可以通过 $_GET['page'] 使用它
  • 我设法通过基本分页教程做到了这一点:phpfreaks.com/tutorial/basic-pagination 我使用了 _SERVER['PHP_SELF'] 变量。但是非常感谢您的帮助!
【解决方案2】:

这个概念被称为pagination。在这——

1st) LIMIT 20,0    (from 1 to 20)
2nd) LIMT 20,20    (from 21 to 40)
3rd) LIMIT 20,40   (from 41 to 60) 
4th) LIMIT 20,60   (from 61 to 80)

它是limitoffset 的组合。 1st, 2nd, 3rd... 是页面, (LIMIT 20,0) 是查询的插件,offset 参数您将从$_GET 获得(来自URL

【讨论】:

  • 谢谢,但我认为语法错误。它应该是 LIMIT 20 OFFSET 0 对吗?我正在使用您的语法,而 mysql 没有回复正确的行...我的意思是在 mysql 语法中。
猜你喜欢
  • 1970-01-01
  • 2021-02-05
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-15
  • 1970-01-01
相关资源
最近更新 更多