Я создаю mysql-заявление, которое разбивает на страницы результаты, используя LIMIT x, n
(где x
это смещение и n
возвращенные записи).
Смещение создается с помощью GET-Vars в виде page=x
,
Теперь в индексе Google есть некоторые странные записи, полученные из старых сканирований, где переменная страницы превышает фактическое количество записей в наборе результатов.
Значит, запрос, созданный с помощью переменной страницы, приводит к чему-то вроде LIMIT 1000, 30
— но запрос вернет только 900
записи (так как содержимое таблицы тем временем изменилось. Это, конечно, возвращает пустой набор результатов).
Есть ли способ сообщить mysql, что если смещение превышает возвращаемые записи, чтобы просто показать последний возможный набор результатов? Я не хочу делать дополнительный запрос, используя COUNT()
во-первых, так как это удвоит нагрузку на MySQL-сервер (сейчас я использую SQL_CALC_FOUND_ROWS
чтобы определить общее количество записей, которые запрос будет возвращать без LIMIT
-Утверждение.
Получите все запрошенные строки, по крайней мере, с одной строкой (MySQL 5.6):
SELECT *
FROM `table`
LIMIT 1000, 30
UNION ALL (
SELECT *
FROM `table`
WHERE FOUND_ROWS() = 0
ORDER BY `id` DESC
LIMIT 1
)
Других решений пока нет …