想要在我的網站上獲得我所有的友好活動。Yii:與3張表的內連接
我有3個表:
- follow_users(
user_id
,follow_user_id
) - 視頻(
ID
,Title
,Date
,Likes
,Views
,Active
,users_id
) - videos_has_userlikes(
id
,isLiked
,users_id
,videos_id
)
現在,我想創建查詢來獲取所有這樣的朋友在登錄用戶的活動
事情是這樣的:
$followers = Select * from follow_users where user_id = $MyId;
foreach ($followers as $userFollow) {
Select * from videos innerjoin videos_has_userlikes on videos.ID = videos_has_userlikes.videos_id where videos_has_userlikes.users_id = $userFollow;
}
我在Yii的功能試過,但我不知道如何使用innerjoin有3個表..
public function getFriendsLikeActivity($userId){
$criteria = new CDbCriteria;
$criteria->select = '*';
$criteria->alias = 'videos, videos_has_userlikes, follow_users';
$criteria->join = 'INNER JOIN videos_has_userlikes ON videos.ID = videos_has_userlikes.videos_id INNER JOIN follow_users ON videos.users_id = follow_users.user_id';
$criteria->condition = 'follow_users.user_id =:usersID AND videos.users_id = :usersID AND Active=:active AND videos_has_userlikes.isLiked =:liked';
$criteria->params = array(
':usersID' => $userId,
':active' => TRUE,
':liked' => TRUE,
);
$criteria->order = 'videos_has_userlikes.date Desc';
return Videos::model()->with('users')->findAll($criteria);
}
請一些幫助:)
謝謝!
謝謝@deez!
但我只想說我按照用戶的樣活性..
現在我取人從VideosHasUserLikes表中的數據,但沒有表followUser的關係。用戶表和followUser表之間只有關係。有沒有辦法用$ criteria-> with()加入這些表格?
現在我有這樣的代碼,但因爲沒有關係「followUser」表我得到一個錯誤..
public function getFriendsLikeActivity($userId){
$criteria = new CDbCriteria;
$criteria->select = '*';
$criteria->alias = 'videos_has_userlikes';
$criteria->condition = 'videos.users_id = :usersID AND Active=:active AND videos_has_userlikes.isLiked =:liked';
$criteria->params = array(
':usersID' => $userId,
':active' => TRUE,
':liked' => TRUE,
);
$criteria->with = array(
'videos'=>array(
'together'=>true,
'select'=>'*',
),
'users'=>array(
'together'=>true,
'select'=>'*',
),
'followUser'=>array(
'together'=>true,
'select'=>'*',
),
);
return VideosHasUserLikes::model()->findAll($criteria);
}
也許類似的東西?
public function getFriendsLikeActivity($userId){
$criteria = new CDbCriteria;
$criteria->select = '*';
$criteria->alias = 'videos_has_userlikes';
$criteria->condition = 'videos.users_id = :usersID AND Active=:active AND videos_has_userlikes.isLiked =:liked';
$criteria->params = array(
':usersID' => $userId,
':active' => TRUE,
':liked' => TRUE,
);
$criteria->with = array(
'videos'=>array(
'together'=>true,
'select'=>'*',
),
'users'=>array(
'together'=>true,
'select'=>'*',
'with' => 'followUser'=>array(
'together'=>true,
'select'=>'*'),
),
),
);
return VideosHasUserLikes::model()->findAll($criteria);
}
謝謝!
謝謝!我的查詢看起來是這樣的..但我不知道如何寫他在Yii - >從視頻中選擇* JOIN videos_has_userlikes ON videos.ID = videos_has_userlikes.videos_id WHERE active = true AND videos_has_userlikes。users_id IN(SELECT follow_user_id FROM follow_users JOIN users on follow_users.user_id = users.id WHERE user_id = 1 AND isliked = true); – user2381153