我遇到一个问题,我现在还无法找到用于键集分页的解决方案:
假设我们有此查询:
SELECT a.id, a.number, AVG(b.rating) AS rating
FROM a LEFT JOIN b ON xxxxxxx
GROUP BY a.id
ORDER BY rating DESC, a.number DESC
LIMIT xxxx
我们应该如何对此进行键集分页?
仅对于一个数字,我们可以WHERE a.number < ?;
仅用于评级,我们HAVING rating < ?;
如果存在两个条件,我们可以使用WHERE (x, y) < (?, ?)
。
但是如何同时在何处?
编辑:我今天实现了这一点,发现它比OFFSET分页要慢,因此不建议这样做。
您永远无法使用的位置,因为它无法访问评级。
您可以做的是
拥有(x,y)
SELECT a.id, a.number, AVG(b.rating) AS rating
FROM a LEFT JOIN b ON a.id = b.id
GROUP BY a.id, a.number
HAVING (a.number, rating) < (1, 1)
ORDER BY rating DESC, a.number DESC
LIMIT xxxx