2010-03-20 64 views
3

作爲評論總是有它,你可以選擇顯示前5個評論(我知道如何),如果超過5,你可以點擊一個鏈接,它會顯示以下5條評論。問題是,我不知道該代碼應該如何爲它顯示我在說什麼 比方說,我有10條評論中,我使用如何選擇TOP 5,然後選擇以下5?

下一個5

更好的主意SELECT * FROM新聞ORDER BY ID DESC LIMIT 5

,將顯示前5評論說,ID爲10,9,8,7,6

但什麼意見,如果我要評論ID爲5,4,3,2,1?

回答

4
SELECT * FROM news ORDER BY ID DESC LIMIT 5, 5 

假設你使用MySQL,LIMIT支持兩個參數,offset(可選)和row_count

[LIMIT {[offset,] row_count | row_count OFFSET offset}]

使用OFFSET的替代方法是爲了與PostgreSQL兼容。要做到這一點

2

我假設你正在談論的MySQL,那麼你的答案是:

SELECT * FROM news ORDER BY ID DESC LIMIT 5 OFFSET 5 
+0

對不起,我忘了提及MySQL以及我的壞。 是的,感謝您的回覆,我谷歌抵消(從來沒有聽說過它),有點知道它是如何工作的。但是我應該怎麼做,首先它顯示TOP 5,並且點擊一個鏈接,它會顯示以下5個等等? 我應該使用get函數並將該值用於選擇參數嗎? – Crays 2010-03-20 12:29:02

1

一種方式,是味道無關的是:

SELECT TOP 5 * 
    FROM table 
WHERE pk NOT IN (SELECT TOP (page * 5) pk 
        FROM table 
        ORDER BY pk) 
ORDER BY pk 
0

如果你想顯示的所有文字前五的意見(從到Joscha您的評論採取的),然後再過五條評論但使用縮短的文本或只是標題,您不應該使用兩個SQL查詢,而應該在應用程序邏輯中執行此操作。

所以選擇所有的新聞條目:

SELECT id, title, body, date FROM news ORDER BY id DESC LIMIT 10 

然後遍歷你的結果。顯示前五個不同於接下來的五個。

當你想擁有什麼分頁程序,一樣可以下手,說0頁:

$page = isset($_GET['page'] ? intval($_GET['page']) : 0; 
SELECT id, title, body, date FROM news ORDER BY id DESC LIMIT 5 OFFSET $page * 5 + 5; 
1

這是一個客戶端的事情。

顯示5,隱藏其餘部分直到點擊。喜歡這個網站:沒有回電得到剩下的隱藏評論。