с другой стороны, можно использовать и первоначальный запрос:
SELECT * FROM timeline WHERE id > %s AND date_created <= %s ORDER BY date_created DESC, id ASC LIMIT 10
но нужно обеспечить условие, чтобы каждое новое событие имело дату больше или равную дате предыдущего события и идентификатор, больший чем у предыдущего
Можно попробовать решить следующем образом.
Создаем уникальный идентификатор для каждого события:
uid = unix_datetime << 32 + event_id
+ создаем к нему индекс в бд.
event_id — должен быть уникален, и тем самым он обеспечит уникальность этому идентификатору. А конструкция unix_datetime << 32 «размажет» события по временной шкале. 32 — это количество бит (=integer). Т.е получится своеобразный идентификатор, привязанный к времени, но при этом уникальный.
Если вы ожидаете, что количество событий перевалит за пределы uinteger, то нужно подумать над тем, как хранить uid. Можно для него использовать тип Decimal или varchar. А так можно обойтись типом bigint.
далее работаем с этим индексом, как с обычным числом. Т.е запрос будет следующим:
SELECT * FROM timeline WHERE uid < %s ORDER BY uid DESC LIMIT 10
при малом количестве записей этот запрос прокатит, но для лучшей производительности лучше делать условие так, чтобы однозначно попадать на нужную позицию в таблице и затем выбирать всегда только первые 10 записей.
ps в MySQL:
LIMIT 0, 10 — выберет первые 10 записей — гуд
LIMIT 10, 10 — будет выбрано 20 записей и в прогу будет передано только последние 10
…
LIMIT 1000, 10 — будет выбрано 1010 записей и в прогу будет передано только последние 10
судя по тому, какой Вам макет нужно сделать, лучше всего сделать свою реализацию, т.к. Вам еще нужно будет менять высоту области ввода сообщения. Хотя, с другой стороны, изменение высоты области ввода сообщения можно реализовать за счет css.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
но нужно обеспечить условие, чтобы каждое новое событие имело дату больше или равную дате предыдущего события и идентификатор, больший чем у предыдущего