从yii 2中的其他表中按顺序(*)排序

时间:2015-06-10 10:06:16

标签: php mysql activerecord yii2

我有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中实现它

在任何帮助下,我将不胜感激 提前谢谢!

2 个答案:

答案 0 :(得分:3)

首先,您应该为videolikes表创建ActiveRecord类,以简化操作。

目的是创建以下两个类class Video extends \yii\db\ActiveRecordclass 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