首页 > 解决方案 > 从 Yii2 中的相关表中订购一个表

问题描述

我有一个名为的表"video",其中没有"likes",因为我创建了另一个表"video-like"来加入每个喜欢的"user". 但我想按喜欢对视频进行排序,但我不知道该怎么做。

我正在使用 Yii2 框架和 PostgreSQL。

在此示例中,我创建了一个从新视频到旧视频排序的查询。这很容易,因为我不必访问另一个表来做到这一点。

$this->orderBy(['created_at' => SORT_DESC]);

任何帮助都是有用的!

标签: phppostgresqlyii2yii2-advanced-app

解决方案


您可以有 2 个嵌套选择。

$query = Model()::find();
$subQuery = ModelLikes()::find()
            ->select("COUNT(*) AS amount")
            ->groupBy([
                ModelLikes::tableName() . '.source_id'
            ])
            ->orderBy(['amount' => SORT_DESC]);
$query->leftJoin(['T' => $subQuery],
            Model::tableName() . ".id= T.source_id");
$data = $query->all();

您应该根据您的模型更改模型的名称和字段。

source_id 是 likes 表中视频的 id


推荐阅读