[不懂就问] 请问如下sql如何优化到laravel Query,或者有更好的写法吗
- 写在前面:有则改之无则加勉
背景
场景:一个论坛性质的东西,将用户最新发布的文章查询一个列表。然后找到最新的10条评论(时间倒叙就可以)正常展示在文章标题下。至此(有最新评论的内容展示在最前面。其中新闻排序数组也相当与扫全表
- 目前代码
$newsArr = new News(); $newsArr->whereIn('id', $newsOrderArr); // $newsOrderArr 为最新评论排序的资讯id $newsArr->orderBy(DB::raw('FIND_IN_SET(id, "' . implode(",", $newsOrderArr) . '"' . ")")); // 根据排序好的内容排序 $newsArr->select( ...... ); $newsArr->get(); // 完成后分页 $company->each(function ($q, $c) use ($arr, $info) { $q->load([ ...... ]); });
背景2
场景:一个表中一个品种(并非外表)出现次数最多的前10的品种,导致有扫描全表的可能,如何优化
sql
select DISTINCT count( type ) AS count, type from `news` where `type` = ? and `type` is not null group by `type` order by `count` desc limit 10
Query
$newsArr = new News(); $newsArr->select(DB::raw('DISTINCT count( type ) AS count, type')); ... $newsArr->limit(10); $newsArr->groupBy('type'); $newsArr->orderBy('count', 'DESC'); $newsArr->get()->toArray();
请问如何优化或规避
你指的是这个吗
这个网站 复杂的运行不了呀