Почему не удается правильно вывести данные из базы данных постранично?

Как настроить пагинацию вывода данных из базы данных так, чтобы последняя страница также отображала все записи, а не обрывалась? В моем коде, который выводит по 24 записи на страницу, последняя страница не показывает все оставшиеся записи, даже если их число не кратно 24. Как исправить это поведение?
  • 10 марта 2024 г. 16:19
Ответы на вопрос 2
Проблема с неправильным выводом данных из базы данных постранично может быть связана с неправильно настроенным запросом SQL, неправильными параметрами пагинации или ошибками в коде обработки данных. Для того чтобы последняя страница также отображала все записи, даже если их число не кратно количеству записей на странице, можно внести некоторые изменения в код.

Примерно так можно сделать это:

1. Подсчитайте общее количество записей в базе данных.
2. Рассчитайте общее количество страниц на основе количества записей и количества записей на странице.
3. При запросе данных из базы данных учтите особенности вывода на последней странице. Например, если на последней странице осталось меньше записей, чем обычно на странице, то выведите только оставшиеся записи.

Пример:

```php
// Параметры пагинации
$limit = 24;
$page = isset($_GET['page']) ? $_GET['page'] : 1;
$offset = ($page - 1) * $limit;

// Запрос на получение данных
$query = "SELECT * FROM table_name LIMIT $limit OFFSET $offset";
$result = mysqli_query($connection, $query);

// Получение общего количества записей
$total_records = mysqli_num_rows(mysqli_query($connection, "SELECT * FROM table_name"));

// Рассчет количества страниц
$total_pages = ceil($total_records / $limit);

// Вывод данных
while ($row = mysqli_fetch_assoc($result)) {
    echo $row['column_name'] . "<br>";
}

// Вывод ссылок на страницы
for ($i = 1; $i <= $total_pages; $i++) {
    echo "<a href='?page=$i'>$i</a> ";
}
```

Этот пример позволит выводить все записи из базы данных постранично, включая последнюю страницу, даже если на ней остается меньше записей, чем обычно на остальных страницах.
$count_m = "82; Тут очевидно синтаксическая ошибка сразу. Молчу про то, что числа намеренно передаются строками... 

if($this->page==1) {
	$page = 1;
}
else {
	$page = (int) $this->page;
}
Это что за магия? Что оно вообще делает? Что будет если единица ВНЕЗАПНО попадет в блок else??

$start = ceil($count_m/$m_per_page); А теперь подумайте, как должна называться переменная, считающая общее количество страниц.

суть в том, что когда формируется limit 72, 24, т.е 3 страница,
Стоит пройти курс арифметики за 2 класс, и посчитать что 3 страница будет limit 48, 24.
limit 24, 24 - вторая и limit 0, 24 - первая.
Похожие вопросы