Правильная подгрузка контента HTML, JS, PHP, MYSQL с учетом добавления и удаления строк

Всем привет! Написал небольшой новостной движок и подгрузку контента (записей) через ajax. После написания, столкнулся с проблемой "не правильной" подгрузки последующих таблиц, т.е если открыта страница к примеру с 6 записями, нажав на кнопку "Показать еще" открываются следующие 6 записей (они работают как надо), но например если в до момента нажатия на кнопку "Показать еще" добавляются новые или восстанавливаются из корзины к примеру старые в начале, то правильный офсет сбивается и показывает либо лишние строки таблицы, либо наоборот, более старые - если запись восстановлена вначале таблицы до уже выведенного списка. Интересует правильный MySQL-запрос. Пробовал следующее:

$limit = $limit + 6`

$sql = 'SELECT * FROM posts ORDER BY post_id ASC LIMIT {$limit},6';

Или

$offset = $offset + 6
$sql = 'SELECT * FROM posts ORDER BY post_id ASC LIMIT 6 OFFSET {$offset}';

Пробовал так же на основе последнего идентификатора:

$last_id = $_POST['last_id'];
$sql = 'SELECT * FROM posts WHERE post_id > {$last_id} ORDER BY post_id ASC LIMIT 6';

Но на данном этапе сталкивался с проблемой порядка сортировки, т.к присутствуют записи с сортировкой не по идентификатору, а по дате или другой ячейке с данными сортировки по типу post_sort.

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

$offset = $offset + 6;
$old_count = $_POST['old_count'];
$count = 'SELECT COUNT(*) AS num FROM posts';

if($count > $old_count)
    $offset = ($count - $old_count) + $offset;
elseif($count < $old_count)
     $offset = $offset - ($old_count - $count);


$sql = 'SELECT * FROM posts ORDER BY post_id ASC LIMIT 6 OFFSET {$offset}';

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

На примере таблицы c

post_id post_date post_sort
1 (удалена после загрузки страницы другим пользователем) 2022-01-11 100
2 2022-01-11 90
3 2022-01-11 20
4 2022-01-11 1
5 2022-01-11 0
6 2022-01-11 0
----- следующие 6 идут после ----

Выведет 8,9,10,11,12 минуя 7. А если 1 запись будет к примеру восстановлена после загрузки страницы то получим 6,7...

Есть ли такая возможность что бы это правильно рассчитывалось?


Ответы (0 шт):