即使是简单的"我也很难理解。互联网上的分页教程。
我正在为我的公司创建一个Intranet站点,并且完成它的唯一步骤是对所有查询进行分页,因为它们都包含数千个结果,尤其是搜索结果。
我的问题是,我能够以下面的方式对查询进行分页:
SELECT * FROM hdticket WHERE id = 22;
答案 0 :(得分:2)
您需要在MySQL查询中添加LIMIT
子句。这很简单:
SELECT * FROM hdticket WHERE id = :ticknum LIMIT 0, 10
这将从头开始获取十条记录(想象你的记录是零索引的)。第一个数字是何时开始从中获取,第二个数字是此后要获取的数量。所以从0开始,它将获取接下来的10条记录。这将是第1页。
要获取后续记录页面,您只需要增加第一个数字。因此,要获得第二页,您需要从10开始计数,然后获取接下来的10条记录。此查询将如下所示:
SELECT * FROM hdticket WHERE id = :ticknum LIMIT 10, 10
然后是第3页:
SELECT * FROM hdticket WHERE id = :ticknum LIMIT 20, 10
等等。希望你能看到出现的模式。
当您使用$_GET
参数时,您可以只定制您的网址以记录您的记录。因此, http://intranet/index.php?page = 2 的网址会显示:
<?php
$page = intval($_GET['page']);
$limit = 10;
$offset = (($page - 1) * $limit);
$sql = "SELECT * FROM hdticket WHERE id = :ticknum LIMIT $offset, $limit";
希望这有帮助。
另外,还有几个旁白。不要使用mysql_
函数,因为它们已被弃用。您可以在官方手册页中看到:http://php.net/manual/en/function.mysql-query.php。
此外,您的代码容易受到SQL注入攻击,因为您正在使用URL中的内容并直接在SQL查询中使用它。这很好,如果你在那里添加数字用于分页,但是如果某人恶意将SQL放入URL中,他们可以做各种各样的事情,比如截断你的表或你的整个数据库,它会发生,因为你“只是通过而不检查它。”
要解决这个问题,如果您使用mysql_
函数的替代方法(例如PDO),则可以在SQL语句中准备变量。您的代码看起来像这样:
<?php
$sql = "SELECT * FROM hdticket WHERE id = :ticknum LIMIT :offset, :limit";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':ticknum', $ticknum, PDO::PARAM_INT);
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->bindParam(':limit', $limit, PDO::PARAM_INT);
$stmt->execute();
这可以确保传递给SQL字符串的数据符合您的预期,并自动转义以防止SQL注入。
答案 1 :(得分:-2)
你可以使用top / limit来做到这一点..
如果你只想要前10名:
select top 10,* from table;
或 如果你想去页面那么:
select * from table limit 10 , 20;