проблема
У меня есть таблица MySql с х строк, где каждая строка в качестве уникального идентификатора. Я хочу дать каждому из моих пользователей по 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, чтобы проверить, перекрывается ли она (псевдокод):
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, вы достигли последней страницы на предыдущей итерации.
Других решений пока нет …