2010-04-11 105 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