从 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】:首先,您应该为 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
希望对你有帮助。
【讨论】:
马特,你能帮帮我吗?我在我的逻辑中应用了相同的查询。但我没有在 $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(*) 排序的主要内容,如果未能解决你的问题,请参考以下文章