2010-03-20 70 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,隐藏其余部分直到点击。喜欢这个网站:没有回电得到剩下的隐藏评论。