2013-05-28 68 views
0

我有一個分頁代碼。分頁變量

$nextpage = $pageno+1; 

這會爲下一頁創建一個html鏈接。不幸的是,$pageno變量,可以說它是350例如不能通過+1更改工作。這也需要它的ID 351,並且數據庫中的行不總是連續的數字,它們有差距。

12467等(這是因爲腳本分配一個ID的方式。

因此而不是一個+1分頁可變的,我怎麼能告訴它來尋找下一行?而不是

感謝

編輯:

我發現在這個線程解決方案:mysql get previous and next record id

+0

在你的sql中使用一個「LIMIT」子句,它可以和你的ID號完全無關。 – jeroen

回答

0

數據庫表的主鍵應該是auto_incriment。但刪除行仍然可以在ID中留下空洞。

正如@jeroen提到你不應該通過列表的ID選擇行。只需使用LIMIT。

例如:

SELECT * FROM post WHERE active = 1 ORDER BY id LIMIT 0, 10 
0

繼承人一個非常簡單的例子:

對於頁面中,我們簡單地使用查詢字符串。在這個例子中,讓我們使用$ _GET ['page']初始化$ page變量。如果GET var未設置,我們默認爲第1頁。

$page = isset($_GET['page']) ? (int) $_GET['page'] : 1; 

現在,我們要弄清楚我們的查詢中有多少頁面。爲此,我們可以使用COUNT()SQL函數,然後將返回的數字除以我們想要的每頁結果數量。

$pages = implode(mysql_fetch_assoc(mysql_query("SELECT COUNT(key) FROM table"))); 
$pages = ceil($pages/6); 

現在,因爲我們可能有其他的GET變量設置,我們希望保留查詢字符串。要做到這一點,我們只需將所有當前變量(當然除了第一頁)組合成一個字符串。

$querystring = ""; 
foreach ($_GET as $key => $value) { 
    if ($key != "page") $querystring .= "$key=$value&"; 
} 

然後,我們可以遍歷頁面,並將它們的鏈接回顯出來。使用條件或三元運算符,我們也可以爲當前頁面分配一個不同的類。

echo "Pages: "; 
for ($i = 1; $i <= $pages; $i++) { 
    echo "<a " . ($i == $page ? "class=\"selected\" " : ""); 
    echo "href=\"?{$querystring}page=$i"; 
    echo "\">$i</a> "; 
} 

然後,僅顯示相關的當前頁面,我們可以使用LIMIT SQL子句,或在這種情況下,限制結果(($頁 - 1)* 6),6(因爲我們有每頁6個結果,第一頁需要從第0條記錄查詢)。

$result = mysql_query("SELECT * FROM table LIMIT " . (($page - 1) * 6) . ", 6"); 
+0

我已經更改了代碼,並將所有行顯示爲頁碼。因此,包含80行的相冊顯示頁面:1 - 80. 存在'$ i'變量的問題,表示頁碼。原來的問題仍然存在。它不會調用下一個現有的行,只是假設ID是1-80。 –