Нумерация клавиш с помощью WHERE & HAVING - PullRequest
1 голос
/ 28 марта 2020

Я столкнулся с вопросом, что пока не могу найти решение для нумерации клавиш набора:

Предположим, у нас есть этот запрос:

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

Как мы должны сделать пагинацию набора ключей для этого ?

Только для a.number у нас может быть WHERE a.number < ?; Для рейтинга, мы делаем HAVING rating < ?; Если есть два условия для где, мы можем иметь WHERE (x, y) < (?, ?).

Но как это сделать HAVING и WHERE?

Редактировать: я реализовал это сегодня и обнаружил, что это медленнее, чем нумерация смещений OFFSET, поэтому не рекомендуется.

1 Ответ

0 голосов
/ 29 марта 2020

Где вы никогда не можете использовать, потому что он не может оценить рейтинг.

Что вы можете сделать, это

HAVING (x, y) <(1, 1) </p>

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
...