[不懂就问] 请问如下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
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 5
chowjiawei

你指的是这个吗

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

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

file

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

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