РЕДАКТИРОВАТЬ: Похоже, MySQL не позволяет такого рода выражения в предложении OFFSET. Если вы можете использовать подготовленный оператор (либо непосредственно в SQL, либо на другом языке), вы можете сделать расчет заранее и использовать его. См. Даниэль ответ на этот вопрос. Я оставляю здесь этот ответ из-за другой полезной информации.
То, что вы ищете, называется нумерацией страниц. В MySQL это можно сделать с помощью ключевых слов LIMIT
и OFFSET
:
SELECT image
FROM images
ORDER BY updated_at
LIMIT 6
OFFSET (DIV(?, 6) * 6)
Заменить ?
запрошенным индексом изображения. Обратите внимание, что это даст изображения со смещением 60, 61, 62, 63, 64, 65 при запросе изображения 62. Я предположил, что последнее смещение, которое вы дали в примерах, было эксклюзивным. Вы должны соответственно скорректировать, если я сделал неверное предположение.
И небольшое объяснение:
LIMIT
заставляет запрос возвращать только заданное количество результатов. Потому что вы всегда хотите шесть, это легко.
OFFSET
заставляет запрос возвращать только результаты с заданным смещением. Вычисление делает целочисленное деление на шесть и умножает на шесть. Это приводит к предыдущему кратному шести из данного числа, именно то, что вы хотите.