一開始打算這樣實現,卻忽略了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卻不可以。