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

Posted

技术标签:

【中文标题】从 yii 2 中的其他表中按 count(*) 排序【英文标题】:Order By count(*) from other table in yii 2 【发布时间】:2015-06-10 10:06:15 【问题描述】:

我有 2 张桌子:视频和点赞 视频表有字段:id、title .. likes 表有字段: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 中实现它

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

【问题讨论】:

【参考方案1】:

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

希望对你有帮助。

【讨论】:

马特,你能帮帮我吗?我在我的逻辑中应用了相同的查询。但我没有在 $data 响应中得到“countlike”的值。而且我没有收到任何错误,请您在这种情况下提供帮助。 如何从$data对象中提取countlike?【参考方案2】:

试试这个:

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

【讨论】:

以上是关于从 yii 2 中的其他表中按 count(*) 排序的主要内容,如果未能解决你的问题,请参考以下文章

如何从 sql 中的 2 个表中按组聚合和计算平均值?

SQL:按条件从不同表中按计数排序

如何在Yii中执行一个查询中的select和count

在每个表,mysql,经典asp中按相同字段排序2个表

从 Hive 中的多个表中选择 count(*)

从 MySQL 中的时间戳排序表中按列选择第一个和最后一个匹配项