LIMIT и OFFSET — начинать с начала, если смещение превышает количество строк или запрос возвращает меньше записей, чем 5

У меня есть таблица VID и некоторые записи в нем. По умолчанию первые 5 записей отображаются на странице. Если пользователь нажимает кнопку, jquery запускает ajax, который запускает php-скрипт и извлекает следующие 5 строк и возвращает ответ, который заменяет предыдущие записи на странице и пр. Проблема в том, что смещение становится больше, чем записи, оставленные в таблице. Скажем, у меня 15 записей. Сначала запрос занимает первые 5 записей:

  $start = $_POST['start_forward'];
$query = "SELECT * FROM vid ORDER BY datev DESC LIMIT $start,5"
($_POST['start_forward']

скрытое поле ввода, которое увеличивается каждый раз на 5, начиная с 0.

Поэтому в следующий раз, когда пользователь нажимает кнопку $ start, теперь 5. Затем в следующий раз 10. И когда он достигает 15 — отображать нечего, поскольку существует всего 15 записей. Поэтому я должен быть уверен, что всегда есть как минимум 5 записей для отображения. Если меньше — я хочу получить недостающие записи в начале столбцов. Итак, в данном случае — когда $ start os 15, я хочу, чтобы он снова был равен 0, чтобы я мог получить записи из начала снова. Это должно быть как бесконечный цикл. И если общее количество записей равно 18. Тогда, когда $ start равно 15, я хочу получить две другие недостающие записи в начале столбца. Так что, если рассчитать его по id. Идентификаторы окончательных ответов должны быть 16, 17, 18, 1 и 2. Последние 2 должны быть извлечены с самого начала.

Я искал информацию и нашел:

 $query = "SELECT FOUND_ROWS();";
$result = mysqli_query($conn, $query);

Я знаю, что это будет подсчитывать общее количество строк в таблице, но я не могу обернуть голову, как использовать его в моем случае. Любая помощь?

Я думаю, что jquery-код здесь не имеет значения, так как это обычный ajax-скрипт, который отправляет переменную $ start_forward в php-скрипт.

Спасибо заранее.

1

Решение

После получения строк из базы данных с помощью имеющегося у вас запроса вы можете посчитать количество строк, например, с помощью:

$count = $result->num_rows;

Тогда, если $count недостаточно высокий (менее 5), вы можете повторить запрос, на этот раз с другим LIMIT:

$query = "SELECT * FROM vid ORDER BY datev DESC LIMIT " . (5 - $count);

Не забудьте также отправить эту сумму (5 - $count) с вашим ответом ajax.

1

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

Вы можете сравнить в PHP, если смещение превышает общее число (num_rows) и если оно выше, вы просто вычитаете общее число, пока результат не становится отрицательным (рекурсивная функция).

0

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