ActiveRecord - получить последние 20 записей где - PullRequest
2 голосов
/ 11 февраля 2020

У меня есть запрос ActiveRecord:

@results = Instrument.where("id < ?", this_id).limit(20)

Возвращает первые 20 записей, которые соответствуют критериям. Я пытаюсь найти способ эффективного получения последних 20 записей запроса.

Чтобы быть более точным c, если у меня всего 100 записей с идентификаторами от 1 до 100 и я указываю

this_id = 51
@results = Instrument.where("id < ?", this_id).limit(20)

, я получаю записи с 1 по 20, тогда как я хочу получать записи 31 до 50. Есть ли эффективный способ сделать это? Я стараюсь не читать всю базу данных до критериев поиска, а просто взять последние 20.

Кстати, этот SQL делает именно то, что я ищу:

SELECT * FROM (SELECT * FROM instruments WHERE id < 151000 ORDER BY id DESC LIMIT 10 ) sub ORDER BY id ASC;

Ответы [ 3 ]

3 голосов
/ 11 февраля 2020

Согласно запросу SQL в обновлении вашего вопроса, вы можете использовать from для передачи подзапроса и создания чего-то подобного:

Instrument
  .from(Instrument.where('id < ?', 151_000).order(id: :desc).limit(10),
        :instruments)
  .order(:id)
0 голосов
/ 11 февраля 2020
this_id = 31
range = 20

Можно использовать следующие параметры:

  1. Instrument.where ("id>?", This_id) .first (диапазон)
  2. Инструмент. где (id: [this_id..this_id + range])
  3. Instrument.where ("id>? AND id <?", this_id, this_id + range) </li>
0 голосов
/ 11 февраля 2020

А как же:

@results = Instrument.where("id < ?", this_id).last(20)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...