我有2张桌子:视频和喜欢
视频表有字段:id,title ..
喜欢表有字段:id,video_id,user_id
我想获得10个最喜欢的视频。 我可以通过命令在sql中执行:
SELECT videos.*, COUNT( likes.video_id ) AS countlike
FROM videos LEFT JOIN likes ON videos.id = likes.video_id
GROUP BY videos.id
ORDER BY countlike DESC
Limit 10
如何使用yii 2
在ActiveRecord中实现它在任何帮助下,我将不胜感激 提前谢谢!
答案 0 :(得分:3)
首先,您应该为video
和likes
表创建ActiveRecord类,以简化操作。
目的是创建以下两个类class Video extends \yii\db\ActiveRecord
和class Likes extends \yii\db\ActiveRecord
。
为了方便起见,你应该看看为你做的gii实用程序(在yourdomain / gii / model上可用)。填写表格的表格即可完成。
然后你应该能够写下你的请求:
$query = Video::find()
->select(['video.*', 'COUNT(likes.video_id) AS countlike'])
->join('LEFT JOIN', Likes::tableName(), 'videos.id=likes.video_id')
->groupBy('videos.id')
->orderBy(['countlike' => SORT_DESC])
->limit(10);
$data = $query->all();
在我看来,使用ActiveRecord进行复杂请求并不神奇。但它可以避免错误。
我强烈建议您阅读ActiveQuery文档,以获取有关上述方法参数的更多信息。 http://www.yiiframework.com/doc-2.0/yii-db-activequery.html
希望它有所帮助。
答案 1 :(得分:0)
试试这个:
SELECT DISTINCT (
videos.id
)id, videos . * , count( likes.id ) as count
FROM `videos`
LEFT JOIN likes ON videos.id = likes.video_id
ORDER BY count DESC