2015-05-04 2 views
0

Как я мог найти, как этот SQLКак использовать отношения Yii ActiveRecord?

select user.user_id,count(distinct user.user_id,user_lesson_read.lesson_id) as counter 
FROM 
user 
inner join 
user_lesson_read 
ON (user.user_id =user_lesson_read.user_id) 
GROUP BY user_lesson_read.user_id 
having counter >=3 

В ARs? Это дб структура:

User 
-------------------- 
user_id  | 
1   | 
-------------------- 

LessonRead 
------------------------------------- 
user_id | lesson_id | section_id 
------------------------------------- 
1  | 2   | A 
------------------------------------- 
1  | 2   | B 
------------------------------------- 
1  | 3   | A 
------------------------------------- 
1  | 4   | A 
------------------------------------- 

Пользователь 1 имеют 3 урок записи (урок 2,3,4)
Я пробовал некоторые вещи, как

'userLessonRead'=>array(
      'select'=>'count(distinct t.user_id,t.lesson_id) as b', 
      //'condition'=>'', 
     ), 

и я получу CDbException, и неверный код:

t.lesson_id) as b, // one parenthesis here 

Помогает ли кто-нибудь? благодаря!

ответ

0

Попробуйте это,

В модели пользователя,

public function relations() 
{ 

     return array(
        "lessonread" => array(self::HAS_MANY,"LessonRead","user_id") 
     ); 
} 

В поисках(),

$criteria->with = array("user_lesson_read") 
$criteria->group = 'user_lesson_read.user_id'; 
$criteria->having = 'count(distinct t.user_id,t.lesson_id) > 3'; 

В модели LessonRead,

public function relations() 
{ 

     return array(
        "user" => array(self::BELONGS_TO,"User","user_id") 
     ); 
} 
+0

спасибо! кажется, что я неправильно понял функцию with(). – yanis

Смежные вопросы