Всем привет! Написал небольшой новостной движок и подгрузку контента (записей) через 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}';
Но данный метод позволяет рассчитать правильно только до уже выведенных записей, если записи добавлены в конец то тут снова выводятся лишнее.
На примере таблицы
Выведет 7,6,9,10,11,12 минуя 6. А если 1 запись будет к примеру восстановлена после загрузки страницы то получим 6,7...
Есть ли такая возможность что бы это правильно рассчитывалось?