MySQL оператор выбора с предельным смещением больше, чем на самом деле записи

Я создаю mysql-заявление, которое разбивает на страницы результаты, используя LIMIT x, n (где x это смещение и n возвращенные записи).

Смещение создается с помощью GET-Vars в виде page=x,

Теперь в индексе Google есть некоторые странные записи, полученные из старых сканирований, где переменная страницы превышает фактическое количество записей в наборе результатов.

Значит, запрос, созданный с помощью переменной страницы, приводит к чему-то вроде LIMIT 1000, 30 — но запрос вернет только 900 записи (так как содержимое таблицы тем временем изменилось. Это, конечно, возвращает пустой набор результатов).

Есть ли способ сообщить mysql, что если смещение превышает возвращаемые записи, чтобы просто показать последний возможный набор результатов? Я не хочу делать дополнительный запрос, используя COUNT() во-первых, так как это удвоит нагрузку на MySQL-сервер (сейчас я использую SQL_CALC_FOUND_ROWS чтобы определить общее количество записей, которые запрос будет возвращать без LIMIT-Утверждение.

3

Решение

Получите все запрошенные строки, по крайней мере, с одной строкой (MySQL 5.6):

SELECT *
FROM `table`
LIMIT 1000, 30
UNION ALL (
SELECT *
FROM `table`
WHERE FOUND_ROWS() = 0
ORDER BY `id` DESC
LIMIT 1
)

SQL Fiddle

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]