我想选择5个较新的帖子而不是使用var_dump($requestx);
15的帖子,只使用SQL降序。此查询有效,但我想只使用一个id
。有什么想法吗?
SELECT
下一个查询不起作用,因为我想要ids 20-16的帖子,但这个帖子会返回最新的帖子(例如100个帖子中的100-96)
SELECT * FROM (
SELECT * FROM posts WHERE id > 15 ORDER BY id ASC LIMIT 5
) as reverse_ordered ORDER BY id DESC
ids的差距是可能的,上面的数字只是一个例子。
答案 0 :(得分:3)
大多数人都不会认为更简单。但是,它没有使用子查询:
select unnest( (array_agg(p.id order by p.id asc)::int[])[1:5]) as id
from posts p
where p.id >= 15
order by id desc;
子查询的方法在性能方面应该是优越的。
答案 1 :(得分:1)
对于记录,当id
上的索引支持时,具有的查询是最佳的,并且比任何替代方案都快得多。它解析为单个索引扫描。第二类的成本可以忽略不计。不确定为什么你想要一个SELECT
,但这可能是一个误解。
作为概念的证明,当我们接受这种疯狂的追逐时:你要求SELECT *
,而不是SELECT id
:
SELECT (unnest((array_agg(p ORDER BY p.id))[1:5])).*
FROM posts p
WHERE p.id > 15
ORDER BY id DESC;