Индекс по возрастанию, но последние даты отображаются последними

1

Я хочу запросить строки в день в следующем порядке:

  1. сегодня
  2. будущее
  3. прошлое

В настоящее время я делаю простой запрос:

getLatest(howMany, offset) {
    return knex
        .select('*')
        .from('event')
        .orderBy('start_time', 'asc')
        .offset(offset)
        .limit(howMany);
}

Но проблема с этим заключается в том, что он показывает прошлые временные метки в первую очередь. Я знаю, что могу пропустить такие записи:

knex('event')
    .select('id')
    .whereRaw("start_time < NOW()")

UPDATE: Есть ли способ сделать эту работу со смещением? Этот запрос будет запускаться для бесконечного фида каждый раз, когда пользователи достигнут дна, чтобы получить больше событий. Возможно, индексирование?

Это моя схема:

knex.schema.createTable('event', (table) => {
    table.increments().primary();
    table.dateTime('start_time').notNullable();
})
Теги:
knex.js

1 ответ

2

Вам нужно будет использовать orderByRaw для создания предложения ORDER BY, например

ORDER BY start_time < current_timestamp, start_time
  • 0
    Есть ли способ заставить это работать со смещением? Этот запрос будет выполняться для бесконечной подачи, когда пользователи достигнут дна, чтобы получить больше событий. У меня такое ощущение, что для этого потребуется какая-то индексация, но я никогда раньше не использовал индексы.
  • 1
    @VladyVeselinov В каждой книге по оптимизации есть специальная глава для лимита / смещения. Вот одна хорошая демонстрация слайдов по этой теме. Но для меня, я чувствую, что это как «верхний» продвинутый уровень. Для небольших проектов (ниже гигабайт / террабайт данных) - лимит / смещение работает просто отлично. Кроме того, в postgres есть current_date . current_timestamp возвращает текущее время, а current_date - начало дня.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню