这样的 SQL 查询语句对于你们而言是常态吗? - V2EX
请不要在回答技术问题时复制粘贴 AI 生成的内容
iplayio2019

这样的 SQL 查询语句对于你们而言是常态吗?

  •  1
     
  •   iplayio2019 May 27, 2020 2197 views
    This topic created in 2176 days ago, the information mentioned may be changed or developed.
    $query = Student::from('student as s') ->join('user as u','u.object_id','=','s.id') //2020 年 2 月 28 日 08:12:41 新增添加下载证书次数 ->leftjoin('check_result as cr','s.id','cr.student_id') //->leftJoin('classroom_member as cm','cm.user_id','=','u.id') //->leftJoin('classroom as c',function($join){ ->join('classroom_member as cm','cm.user_id','=','u.id') ->join('classroom as c',function($join){ $join->on('c.id','=','cm.classroom_id') ->where('c.status','<>',2); }) ->when($year, function($query)use($year){ return $query->whereRaw('SUBSTRING(c.start_date,1,4) = '.$year); }) ->where('s.is_delete', 0) ->where('u.status',0) ->when(get_user_school_id(),function($query) { $query->where('c.school_id',get_user_school_id()); }) ->where('u.type',0) //学生 ->when($search, function($query)use($search){ return $query->where(function($q)use($search){ $q->where('s.name','like',$search.'%') ->orWhere('s.mobile','like',$search.'%'); }); }) ->orderBy('c.id','desc'); $peixunrenci = $query->distinct('cm.id')->count('cm.id'); $list = $query->groupBy('s.id') ->select( 's.id as stuid','s.name','s.sex','s.nation','s.mobile','s.id_card','s.work', 's.title','s.address', 's.email','s.office_phone','s.create_time','s.nation', 's.post_code', 'u.id as uid','cr.download_count' ) ->addSelect(DB::raw('count(distinct(cm.id)) as count, max(c.start_date) as date')) ->paginate($pageSize); 
    14 replies    2020-05-28 10:10:06 +08:00
    cstj0505
        1
    cstj0505  
       May 27, 2020 via Android
    这是怎么构造出来的?明明一个串的事情,为啥要搞的这么复杂,好奇那些 sql 构造器的意义在哪。
    只是纯讨论下啊。
    6IbA2bj5ip3tK49j
        2
    6IbA2bj5ip3tK49j  
       May 27, 2020
    不写,也不会写这种 sql 。我们搞互联网的都是一把梭 load 内存慢慢筛的。/斜眼
    Jrue0011
        3
    Jrue0011  
       May 27, 2020
    看起来像是统计、报表之类的需求?
    zjsxwc
        4
    zjsxwc  
       May 27, 2020
    @cstj0505

    典型 builder 模式,只是比普通的直接 sql 字符串方便语言复用而已
    xmitman
        5
    xmitman  
       May 27, 2020
    这肯定不是常态啊,话说写成这样怎么维护跟优化啊
    justseemore
        6
    justseemore  
       May 27, 2020
    medoo 没那么多事
    cstj0505
        7
    cstj0505  
       May 27, 2020 via Android
    @zjsxwc 这算不算过度工程化?
    为了设计让代码根本不可读。
    dog82
        8
    dog82  
       May 27, 2020
    直接写一个 sql,不会用这种构造器,看得蛋疼
    miv
        9
    miv  
       May 27, 2020
    还不如一个 sql 清晰
    sockball07
        10
    sockball07  
       May 27, 2020
    太长了 说明需要注释 给出示例 sql
    weirdo
        11
    weirdo  
       May 27, 2020
    4 楼说的对,可读性和原生 sql 差不多,但是比直接使用 sql 方便,不需要用变量拼 sql,直接往对应函数填参数就好了
    iplayio2019
        12
    iplayio2019  
    OP
       May 27, 2020
    @zjsxwc 这种写法能复用在哪里,既不能随便加 HTTP 请求的参数,看起来也费劲。
    zjsxwc
        13
    zjsxwc  
       May 27, 2020 via Android
    @iplayio2019 #12 原文:“@zjsxwc 这种写法能复用在哪里,既不能随便加 HTTP 请求的参数,看起来也费劲。”

    回复:帖子里的例子当然没有体现复用了,最简单的复用场景是,比如你要根据一堆自定义的查询条件生产 sql 代码时,可以通过简单多次动态调用这个 builder 对象的方法,最终生成 sql,如果直接拼 sql 字符串的话自定义查询条件一多你就不得不写出一大堆冗余难以维护的 if 判断,这是前人踩坑后的教训,builder 模式也由此而来,应运而生。
    geligaoli
        14
    geligaoli  
       May 28, 2020
    sql 构造器,对于简单的是省事。对于复杂的语句,真没有原生 sql 好理解。
    About     Help     Advertise     Blog     API     FAQ     Solana     3516 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 82ms UTC 12:06 PVG 20:06 LAX 05:06 JFK 08:06
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86