一个 MySQL sql 语句执行顺序带来的 bug 
                                                    
                        
                    
                    
  
                    
                    今天需要统计一个数据最后3条数据的总和
一开始打算这样实现,却忽略了mysql会先统计sum,再执行limit
$totleForfeit = ForfeitModel::where('user_id', $userId)
                        ->select('amount')
                        ->orderBy('id', 'DESC')
                        ->limit(3)
                        ->sum('amount');后面改成这样
$forfeitDetail = ForfeitModel::where('user_id', $userId)
                        ->orderBy('id', 'DESC')
                        ->limit(3)
                        ->get(['amount']);
$totleForfeit = $forfeitDetail->sum('amount');复习一下mysql执行顺序
1、from子句组装来自不同数据源的数据;
2、where子句基于指定的条件对记录行进行筛选;
3、group by子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用having子句筛选分组;
6、计算所有的表达式;
7、select 的字段;
8、使用order by对结果集进行排序。
9、执行limit这里还有个疑问,求大佬们答疑解惑
明明 select 语句是在group和having后面执行, 
为什么group和having语句却能使用 select里面的别名呢? where却不可以。本作品采用《CC 协议》,转载必须注明作者和本文链接
 
           xiao 的个人博客
 xiao 的个人博客
         
             
                     
                     
            
 
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: