php - 从 yii 2 中的其他表按计数(*)排序

标签 php mysql activerecord yii2

我有 2 个表:视频和喜欢
video 表有字段: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 中实现它

如有任何帮助,我将不胜感激。
提前致谢!

最佳答案

首先,您应该为 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

希望对您有所帮助。

关于php - 从 yii 2 中的其他表按计数(*)排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30753237/

相关文章:

php - 如何在 Windows 的 xampp/wampp 中安装 imagick

php - PHP 中的 MySQL 递归查询替换

mysql - Spark - Mysql 连接 - 不支持的主要版本 52.0 错误

php - 转换 GMT 0 :00 to GMT +5:30 sql

php - 如何在 PHP 中最好地构建硬编码数组数据?

PHP OOP 简单计算器制作

ruby-on-rails - ActiveRecord 检查数组中的任何值是否与 postgres 中的数组中的值匹配

ruby-on-rails - 如何按 Activerecord 中的计算值排序?

php - substr_replace() 在 WHILE 循环中无法按预期工作

ruby-on-rails - ruby on Rails 中的 after_update 回调