2010-04-11 57 views
3

我有一个MySQL查询PHP和MySQL分页

SELECT * FROM 'redirect' 
WHERE 'user_id'= \''.$_SESSION['user_id'].' \' 
ORDER BY 'timestamp'` 

我想分页每页10个结果。我该怎么做?

回答

13

这里是一个很好的起点:

<?php 

// insert your mysql connection code here 

$perPage = 10; 
$page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1; 
$startAt = $perPage * ($page - 1); 

$query = "SELECT COUNT(*) as total FROM redirect 
WHERE user_id = '".$_SESSION['user_id']."'"; 
$r = mysql_fetch_assoc(mysql_query($query)); 

$totalPages = ceil($r['total']/$perPage); 

$links = ""; 
for ($i = 1; $i <= $totalPages; $i++) { 
    $links .= ($i != $page) 
      ? "<a href='index.php?page=$i'>Page $i</a> " 
      : "$page "; 
} 


$r = mysql_query($query); 

$query = "SELECT * FROM 'redirect' 
WHERE 'user_id'= \''.$_SESSION['user_id'].' \' 
ORDER BY 'timestamp' LIMIT $startAt, $perPage"; 

$r = mysql_query($query); 

// display results here the way you want 

echo $links; // show links to other pages 
+0

但是,我如何创建指向其他页面的链接? – Francesc 2010-04-11 10:47:36

+0

为所有与您的where子句匹配的结果选择COUNT,将您获得的perPage值除以获得的总页数,然后执行for循环来回显链接到每个页面。 – 2010-04-11 10:51:29

+0

但是对于前一个?你能举个例子吗?我是一个newvie.Thanks – Francesc 2010-04-11 10:54:53

1

使用查询的LIMIT clausule来限制从数据库中检索到的结果数量。

参见:http://dev.mysql.com/doc/refman/5.1/en/select.html

+0

你可以把一个例子PHP代码,好吗? – Francesc 2010-04-11 10:25:48

+2

谷歌是你的朋友: http://www.phpeasystep.com/phptu/29.html – 2010-04-11 10:27:09

4

使用LIMIT

SELECT * 
FROM redirect 
WHERE user_id = '35251' 
ORDER BY timestamp 
LIMIT 40, 10 

40是有多少记录要跳过,10是多少显示。

你的PHP也有一些问题。您使用反引号(而不是单引号)来围绕表名和列名。你不应该使用字符串连接来建立你的查询。

+0

如果数据已知是安全的,使用字符串连接来建立一个SQL查询没有任何内在错误。 – 2010-04-11 10:44:35

+0

@code_burgar:它不会给出错误的结果,但会为每个新的参数集创建一个新的查询计划。你应该使用绑定参数。 – 2010-04-11 13:22:03

-1

我会从Googling开始。这方面的信息并不缺乏。
(这是一个相当普遍的问题。)

+0

你可以对我所有想要的票进行投票...但是你知道我是对的:) – Atli 2010-04-11 10:28:22

+0

我没有投票给你。 – Francesc 2010-04-11 10:30:10