Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Статистический запрос

Читайте также:
  1. Атрибуты запроса
  2. Ваш компьютер зависает или перестает отвечать на запросы и отображает черный экран
  3. Всегда внимательно отнесемся к Вашему письму и сделаем все возможное для выполнения Вашей поездки, по Вашему запросу и пожеланиям.
  4. Выборка, добавление, удаление и обновление данных с помощью SQL-запросов на подсоединенном уровне.
  5. Выполнение реляционного запроса
  6. Дофамин по запросу
  7. Заголовки запроса
  8. Запрос котировок
  9. ЗАПРОС КОТИРОВОК
  10. Запрос предложений

Помимо реляционных запросов, описанных выше, Yii также поддерживает так называемые статистические запросы (или запросы агрегирования). Этот тип запросов используется для получения агрегированных данных, относящихся к связанным объектам (количество комментариев к каждой записи, средний рейтинг для каждого наименования продукции и т.д.). Статистические запросы могут быть использованы только для связей типа HAS_MANY (например, у записи есть много комментариев) или MANY_MANY (например, запись принадлежит многим категориям, а категориия может относиться ко множеству записей).

Выполнение статистического запроса аналогично выполнению реляционного запроса. Первым делом необходимо объявить статистический запрос в методе relations() класса CActiveRecord.

class Post extends CActiveRecord

{

public function relations()

{

return array(

'commentCount'=>array(self::STAT, 'Comment', 'post_id'),

'categoryCount'=>array(self::STAT, 'Category', 'post_category(post_id, category_id)'),

);

}

}

Выше мы объявили два статистических запроса: commentCount подсчитывает количество комментариев к записи, а categoryCount считает количество категорий, к которым относится запись. Обратите внимание, что связь между Post и Comment — типа HAS_MANY, а связь между Post и Category — типа MANY_MANY (с использованием преобразующей таблицы post_category). Как можно видеть, способ объявления похож на объявление связей, описанных выше. Единственное различие состоит в том, что в данном случае тип связи равен STAT.

За счёт объявленных связей мы можем получить количество комментариев к записи, используя выражение $post->commentCount. В момент первого обращения к данному свойству для получения соответствующего результата неявным образом выполняется SQL-запрос. Как мы уже говорили, это называется подходом отложенной загрузки. Можно также использовать жадный вариант загрузки, если необходимо получить количество комментариев к нескольким записям:

$posts=Post::model()->with('commentCount', 'categoryCount')->findAll();

Выражение выше выполняет три SQL-запроса для получения всех записей вместе с количеством комментариев к ним и числом категорий. В случае отложенной загрузки нам бы понадобилось выполнить 2*N+1 SQL-запросов для N записей.

По умолчанию статистический запрос считает количество с использованием выражения COUNT. Его можно уточнить путём указания дополнительных параметров в момент объявления в методе relations(). Доступные параметры перечислены ниже:




Дата добавления: 2015-09-10; просмотров: 122 | Поможем написать вашу работу | Нарушение авторских прав

Установка связей между AR-классами | Выполнение реляционного запроса | Reflexives | Adjectives | Volunteer: ??? | Project description |


lektsii.net - Лекции.Нет - 2014-2025 год. (0.352 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав