WHERE&HAVING的键分页

问题描述 投票:1回答:1

我遇到一个问题,我现在还无法找到用于键集分页的解决方案:

假设我们有此查询:

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分页要慢,因此不建议这样做。

mysql sql database pagination having
1个回答
0
投票

您永远无法使用的位置,因为它无法访问评级。

您可以做的是

拥有(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
© www.soinside.com 2019 - 2024. All rights reserved.