app首頁一次性展示100篇文章,每篇文章會(huì)顯示最新3條評(píng)論
Db::table('article as a')
->leftJoin('comment as b', 'a.id', '=', 'b.article_id')
->offset(0)
->limit(100)
->get()
->toArray();
然后通過php循環(huán)處理結(jié)果集
方案二
\app\model\Article::with(['comment' => function ($query) use () {
}])->get()
->map(function ($query) {
$query->setRelation('comment', $query->comment->take(3));
return $query;
})
->toArray();
上述直接一次性查出
哪個(gè)方案查詢效率高些?文章表和評(píng)論表都是百萬級(jí)別的。
其中方案二“$query->setRelation('comment', $query->comment->take(3));”,這句是啥意思呢?是不是從數(shù)據(jù)庫中拿出所有的(全表獲?。缓笤俳厝?段?還是已經(jīng)從評(píng)論表中獲取3條了(limit 3)?
大家還有更好的方案沒?
$query->setRelation('comment', $query->comment->take(3));
看樣子應(yīng)該是查了所有,然后再取了三條,你可以看數(shù)據(jù)庫日志確認(rèn)下
一對(duì)多關(guān)系,通俗的來講:首頁顯示100篇文章,每篇文章顯示最新3條評(píng)論
要求速度最快,最優(yōu),效率最高,大家有啥好辦法解決?