Rad*_*mko 5 sql database postgresql
我需要选择包含所有相关标签的所有帖子:
SELECT p.*, pt.name AS tag_name, pt.id AS tag_id FROM posts p
LEFT JOIN posts_tags pt ON pt.post_id = p.id
Run Code Online (Sandbox Code Playgroud)
所以我得到这样的东西:
p.id | p.name | p.content | tag_name | tag_id
1 | Yahoo | ... | first | 1
1 | Yahoo | ... | second | 2
2 | Google | ... | second | 2
2 | Google | ... | third | 3
Run Code Online (Sandbox Code Playgroud)
我知道以这种方式选择记录时可以通过COUNT(p.id)例如获取记录数量,但我没有发现如何设置OFFSET(从一开始就跳过多少条记录)和LIMIT(根据唯一的帖子返回多少条记录)ID.
现在它显然在起作用,它正在跳过/限制记录的数量,而不是真实帖子的数量......
如果我理解正确的话,您需要从偏移量O开始的N 个帖子的所有“标签”行:
SELECT p.*, pt.name AS tag_name, pt.id AS tag_id
FROM (SELECT * FROM posts ORDER BY id ASC LIMIT {N} OFFSET {O}) p
LEFT JOIN posts_tags pt
ON pt.post_id = p.id
Run Code Online (Sandbox Code Playgroud)
附录
DENSE_RANK这是一种仅通过帖子本身进行限制的方法:
SELECT p.id, p.name, p.content, pt.name as tag_name, pt.id AS tag_id
FROM (SELECT DENSE_RANK() OVER (ORDER BY id) AS dr, posts.*
FROM posts) p
LEFT JOIN posts_tags pt
ON pt.post_id = p.id
WHERE dr BETWEEN {N} AND {N + O}
Run Code Online (Sandbox Code Playgroud)