1

私のサイトで私の友人のような活動をすべて取得したかった.

私は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);
        }

ありがとう!

4

1 に答える 1