app首页一次性展示100篇文章,每篇文章会显示最新3条评论
Db::table('article as a')
->leftJoin('comment as b', 'a.id', '=', 'b.article_id')
->offset(0)
->limit(100)
->get()
->toArray();
然后通过php循环处理结果集
方案二
\app\model\Article::with(['comment' => function ($query) use () {
}])->get()
->map(function ($query) {
$query->setRelation('comment', $query->comment->take(3));
return $query;
})
->toArray();
上述直接一次性查出
哪个方案查询效率高些?文章表和评论表都是百万级别的。
其中方案二“$query->setRelation('comment', $query->comment->take(3));”,这句是啥意思呢?是不是从数据库中拿出所有的(全表获取),然后再截取3段?还是已经从评论表中获取3条了(limit 3)?
大家还有更好的方案没?
你不会用模型么? 模型关联,模型添加字段
第二种就是模型,确实方便,就是想问哪种方案好些
关联的好
是啊
$query->setRelation('comment', $query->comment->take(3));
看样子应该是查了所有,然后再取了三条,你可以看数据库日志确认下
这就不行了, 有办法从评论表里取3条吗?
百度了很多, 貌似没有最优的办法
一对多关系,通俗的来讲:首页显示100篇文章,每篇文章显示最新3条评论
要求速度最快,最优,效率最高,大家有啥好办法解决?
要的信息存在一张表里,岂不是就没有关联查询了
那不行的