私のサイトで私の友人のような活動をすべて取得したかった.
私は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
)
ログインしているユーザーのFriends Like Activityをすべて取得するクエリを作成したいと思います。
このようなもの:
$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 で関数を使ってみたのですが、3 つのテーブルで innerjoin を使用する方法がわかりませんでした..
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);
}
助けてください:)
ありがとう!
ありがとう@ディーズ!
しかし、私がフォローしているユーザーのようなアクティビティだけが必要です..
今、VideoHasUserLikes テーブルからすべてのデータをフェッチしていますが、テーブル followUser との関係はありません。user テーブルと 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);
}
ありがとう!