Php 通过活动记录或查询获取文章最多的用户及其数量
我想找到写文章最多的用户。我可以通过以下两种方式使用ActiveRecord:Php 通过活动记录或查询获取文章最多的用户及其数量,php,mysql,sql,activerecord,yii2,Php,Mysql,Sql,Activerecord,Yii2,我想找到写文章最多的用户。我可以通过以下两种方式使用ActiveRecord: $table = Articles::find() ->select('articles.*, COUNT(*) AS cnt') ->with('user','userDetails') ->groupBy('articles.user_id') ->orderBy(('cnt DESC')) ->limi
$table = Articles::find()
->select('articles.*, COUNT(*) AS cnt')
->with('user','userDetails')
->groupBy('articles.user_id')
->orderBy(('cnt DESC'))
->limit(10)
->offset($offset)
->all();
$query = (new Query())
->select('articles.user_id, COUNT(*) AS num_articles')
->from('articles')
->join('LEFT JOIN', 'user_details', 'user_details.user_id = articles.user_id')
->groupBy('articles.user_id')
->orderBy('num_articles DESC')
->limit(10)
->offset($offset)
->all();
并使用如下查询:
$table = Articles::find()
->select('articles.*, COUNT(*) AS cnt')
->with('user','userDetails')
->groupBy('articles.user_id')
->orderBy(('cnt DESC'))
->limit(10)
->offset($offset)
->all();
$query = (new Query())
->select('articles.user_id, COUNT(*) AS num_articles')
->from('articles')
->join('LEFT JOIN', 'user_details', 'user_details.user_id = articles.user_id')
->groupBy('articles.user_id')
->orderBy('num_articles DESC')
->limit(10)
->offset($offset)
->all();
userDetails
。但是我没有得到用户在cnt
用户id
和文章数量。但是我不能通过加入userDetails
来让它工作。所有这些都不起作用:左连接
,右连接
,内部连接
我对解决这两个问题感兴趣是为了学习,但具体来说,我需要帮助解决ActiveRecord问题。好的,我为ActiveRecord解决了这个问题。ActiveRecords需要一个
public$var模型中的代码>。因此,要获得金额,您必须添加所提到的公众。。。对您的模型进行修改,以便在我的情况下:
public$cnt
扩展文章的ActiveRecord
现在,我可以使用问题中给定的请求访问它。但这正好解决了第一点。对于更复杂的查询,我仍然对第二种方法感兴趣。我对活动记录不太了解,但我认为下面是您需要的
select * from user_details where user_id in
(select A.user from
(select user_id as user, COUNT(*) AS num_articles
from articles group by user_id order by num_articles desc LIMIT 10)A
);
对于第二点,您应该将联接表中的必填列包含到select
语句中:
$query = (new Query())
->select('articles.user_id, COUNT(*) AS num_articles, user_details.username as username')
->from('articles')
->join('LEFT JOIN', 'user_details', 'user_details.user_id = articles.user_id')
->groupBy('articles.user_id')
->orderBy('num_articles DESC')
->limit(10)
->offset($offset)
->all();
但是,此查询不会提供记录的计数。如果同时需要用户详细信息和记录计数,则应查看rank方法。