[不懂就问] 请问如下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();

    请问如何优化或规避

另外分享sqlLaravel查询网站

it_cwc
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 5
chowjiawei

你指的是这个吗

$newsArr =  News::query()
->whereIn('id', $newsOrderArr)
->orderByRaw(" field(id, " . implode(',', $newsOrderArr) . ")")
->select([])
->paginate();
2年前 评论
it_cwc (楼主) 2年前
it_cwc (楼主) 2年前
chowjiawei

这个网站 复杂的运行不了呀

file

2年前 评论
it_cwc (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!