проблема
У меня есть таблица MySql с x строк, где каждая строка является уникальным идентификатором. Я хочу дать каждому из моих пользователей кусок из 10 строк. Когда пользователь читает содержимое каждой строки, он нажимает "Далее", и я возвращаю ему следующий фрагмент из 10 строк (WHERE Id BETWEEN StartIndex AND StartIndex + 9
). Это отлично работает, пока кусок не перекрывает таблицу. Как я могу начать работу с самого начала?
Мое (не очень большое) решение
Получение итогового счета:
$result = $connection->query("SELECT count(Id) AS num_rows FROM Uris");
$count = $result->fetch_assoc()["num_rows"];
А затем некоторая if-logic, чтобы проверить, перекрывается ли она (псевдокод):
if (StartIndex + 10 >= count)
makeTwoMySqlCalls(BETWEEN StartIndex AND count-1, BETWEEN 0 AND 10-count-StartIndex)
Есть ли лучший (более быстрый) способ сделать это?
PS: Извините за титул, не знаю, как назвать эту проблему.
Используйте предложение LIMIT
:
SELECT * FROM the_table WHERE 'id' >= start_id LIMIT 10
Это позволит получить до 10 строк, начиная с id
со значением start_id
.
Вам нужно поместить start_id
в качестве значения в запрос, используйте подготовленный оператор.
Подсчитайте строки, которые вы получите, если они меньше 10, вы дошли до последней страницы.
Если они равны 0, вы достигли последней страницы на предыдущей итерации.
JOIN
для получения записиselect * from uris limit 10 offset 0;
первый раз, смещение 10 в следующий раз. просто передайтеpage
вар.$offset = (10 * $page) - 10;
Например, страница 2 будет 2 * 10 (20 записей), - 10 (что дает смещение 10)