dbcriteria with фильтрация выборки

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

dbcriteria with фильтрация выборки

Сообщение kukuruku »

недавно обратил на это внимание и стало интересно
вот запрос который показывает лог

Код: Выделить всё

SELECT `t`.`id` AS `t0_c0`, `t`.`subject` AS `t0_c1`, `queue`.`id` AS `t1_c0`, `queue`.`template_id` AS `t1_c1`, `queue`.`email` AS `t1_c2`, `queue`.`read` AS `t1_c3`, `queue`.`click` AS `t1_c4`, `queue`.`send` AS `t1_c5`, `queue`.`send_at` AS `t1_c6` FROM `tbl_email_template` `t` LEFT OUTER JOIN `tbl_email_queue` `queue` ON (`queue`.`template_id`=`t`.`id`) WHERE (send=1) 
если выполнить запрос вручную то он вернет 3 записи, где `t`.`id` AS `t0_c0`, `t`.`subject` AS `t0_c1` будет 2 дубля
findall возращает 2 записи
формально 3 записи это правильно но в рамках yii правильно 2 записи
интересно как это фильтрование происходит?
Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: dbcriteria with фильтрация выборки

Сообщение rugabarbo »

Какой код это генерирует?
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

Re: dbcriteria with фильтрация выборки

Сообщение kukuruku »

Код: Выделить всё

$criteria=new CDbCriteria;
        $criteria->with = [
            'queue' => [
               
            ]
        ];

        $criteria->compare('send',$send);

        return $this->findAll($criteria); 
Аватара пользователя
Said
Сообщения: 138
Зарегистрирован: 2015.06.04, 10:16

Re: dbcriteria with фильтрация выборки

Сообщение Said »

при использование LEFT OUTER JOIN происходит дублирование записей для того чтобы избежать этого необходимо использовать GROUP BY

Полезные ссылки
LEFT OUTER JOIN with no duplicates on left table - http://stackoverflow.com/questions/1288 ... left-table
Remove Duplicates from LEFT OUTER JOIN - http://stackoverflow.com/questions/2533 ... outer-join

и просьба на следующий раз напишите коды в читабельном виде пример ниже

Код: Выделить всё

SELECT
  `t `.`id`             AS `t0_c0`,
  `t`.`subject`         AS `t0_c1`,
  `queue`.`id`          AS `t1_c0`,
  `queue`.`template_id` AS `t1_c1`,
  `queue`.`email`       AS `t1_c2`,
  `queue`.` READ `      AS `t1_c3`,
  `queue`.`click`       AS `t1_c4`,
  `queue`.` SEND `      AS `t1_c5`,
  `queue`.`send_at`     AS `t1_c6`
FROM `tbl_email_template` `t`
  LEFT OUTER JOIN `tbl_email_queue` `queue`
    ON (`queue`.`template_id`=`t`.`id`)
WHERE ( SEND =1)
 
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

Re: dbcriteria with фильтрация выборки

Сообщение kukuruku »

я же пишу что дублирование есть только в самом запросе,если запрос выполнить ручками
yii возращает записи без дублей
отсюда и вопрос-как yii знает что надо фильтровать?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: dbcriteria with фильтрация выборки

Сообщение ElisDN »

kukuruku писал(а):отсюда и вопрос-как yii знает что надо фильтровать?
По t.id всего одну запись берёт.
Ответить