Насколько дорогой find ('count') в CakePHP? - PullRequest
3 голосов
/ 30 июля 2010

У меня есть приложение CakePHP, в котором я пытаюсь подсчитать количество постов каждого типа, которые есть у пользователя.Я также использую помощника paginate для отображения всех сообщений пользователя в его профиле.
Я мог бы:
1) Сделать запрос find('all', $conditions) для всех сообщений пользователя, а затем проанализировать его для нужного мне количества (перейдяпост по почте и проверяю, совпадает ли это с тем, что я ищу).
2) Сделайте умноженные find('count', $conditions) запросы, получая все нужные мне значения.
3) Сохраняйте новые столбцы в таблице пользователя для отслеживанияэти числа при создании сообщений (укажите, что это будет означать запись в учетную запись пользователя при создании нового сообщения).
Какой из них будет лучшим выбором?

Ответы [ 2 ]

7 голосов
/ 30 июля 2010

Извлечение всех записей из базы данных и подсчет их в PHP - чепуха. Это именно то, для чего нужны базы данных.

A find('count') просто создает SQL-запрос наподобие SELECT COUNT(*) FROM … WHERE …, что действительно является самым быстрым способом. Добавьте соответствующие условия, чтобы получить желаемое количество. Возможно, вам придется освежить свой SQL, чтобы узнать, каковы эти условия.

Существует также специальное встречное кеширование , на которое вы, возможно, захотите взглянуть, если учитываете отношения hasMany.

1 голос
/ 30 июля 2010

Вы должны изменить свой поиск, чтобы включить группу по условию, чтобы агрегировать счет по типу. Смотрите здесь для получения дополнительной информации: http://debuggable.com/posts/how-to-group-by-in-cakephps-new-release-part-2:4850d2c9-edbc-4f0e-9e0e-07d64834cda3

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