如何选择前5条数据,然后再选择接下来的5条数据?

3
作为评论区的常见做法,你可以选择显示前5条评论(我知道如何实现),如果超过5条,你可以点击链接,它会显示接下来的5条评论。问题是,我不知道代码应该怎么写才能显示接下来的5条评论。
更好地说明我的意思,假设我有10条评论,我使用以下代码:

SELECT * FROM news ORDER BY ID DESC LIMIT 5

这将显示前5条评论,即ID为10、9、8、7、6的评论。
但是,如果我想要ID为5、4、3、2、1的评论呢?
5个回答

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

抱歉,我忘记提到MySQL了,我的错。 是的,谢谢回复,我查了一下offset(以前从未听说过),并且有点明白它的工作原理。但是我应该如何使其首先显示前5个,并在单击链接时显示接下来的5个呢?我应该使用get函数并将值用于选择参数吗? - Crays

1

一种不受口味影响的方法是:

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

1

这是一个客户端的事情。

显示5个,点击后隐藏其余部分。就像这个网站:没有回调来获取剩下的隐藏评论。


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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接