Правильная подгрузка контента 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...
Есть ли такая возможность что бы это правильно рассчитывалось?