Получение общего количества результатов в разбивке на страницы - PullRequest
0 голосов
/ 02 декабря 2009

В моем приложении RoR у меня есть запрос, который может возвращать результаты от 0 до 1000000 в любом месте, я ограничиваю его до 16 и предоставляю нумерацию страниц для:

find(:all, :conditions => conditions, :limit => limit, :offset => offset)

Я бы хотел сообщить пользователю, сколько результатов он просматривает по сравнению с общим количеством результатов. Что-то вроде «Показаны 16 из 500». Каков наилучший способ получить общее количество строк без выполнения неограниченного запроса, который, несомненно, будет медленным в случае большого набора результатов? Я также хотел бы остаться независимым от базы данных.

Ответы [ 2 ]

2 голосов
/ 02 декабря 2009

Похоже, мне следовало бы использовать Google немного более тщательно. Rails имеет встроенный класс ActiveRecord :: Calculations (рисунок) для прагматического подсчета в базе данных. Я завелся с помощью кода вроде этого:

results = find(:all, :conditions => conditions, :limit => limit, :offset => offset)
total_count = count(:conditions => conditions)
return {:results => results, :total_count => total_count}
0 голосов
/ 02 декабря 2009

База данных не имеет возможности узнать, сколько строк соответствует запросу, если она на самом деле не выполняет все это. Например, если вы выбираете для MYCOLUMN> 5, тогда нужно прочитать MYCOLUMN в каждой строке таблицы, чтобы узнать, сколько из них имеет значения больше 5. (Хотя вы можете повысить эффективность с помощью индекса.)

Обычно каждый использует COUNT (*) для целей, которые вы описали.

Единственный другой способ, которым я могу придумать, чтобы получить количество строк, которое будет возвращено для запроса без особой работы, - это поместить в таблицу функцию триггера, которая обновляет счетчик каждый раз, когда строка вставляется, обновляется или удаляется в зависимости от того, соответствует ли он запросу. Однако это жестко, так как его необходимо настраивать для отдельных запросов, и, конечно, это не независимый от базы данных подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...