2017-07-27 102 views
-1

我想找到在班上出勤率最高的前5名學生的詳細信息。爲了得到我已經使用以下查詢。但是,問題是如果學生有attendance_count7 9 12 15 1 10,雖然它應該返回9 10 12 15,它返回9 7 15 12(attendance_count)學生的詳細信息。我該如何解決這個問題?如何獲得前4名最高值?

$students = DB::table('students')     
      ->select('students.*') 
      ->orderBy('students.attendance_count', 'desc') 
      ->limit(4)    
      ->where('students.status','=','1') 
      ->get(); 
+7

你的數據庫列是一個varchar也許?將其更改爲一個整數。 – Daan

+0

你把它保存爲一個整數嗎?或者你可能創建了一個var_char字段。如果你在某個地方有一個空格字符,會擾亂排序。 –

+0

向我們展示遷移。 –

回答

-1

由應在where子句後使用和限制條款之前,爲了將解決您的問題

select student.* 
from students 
where status=1 
order by attendence desc 
limit 4; 
+0

'限制'已經在那裏。 –

+0

限制已經存在。但是一旦你已經訂購了它,那麼只有你應該限制它,如果你限制之前,它將獲取表的前4行而不是最大出席的4行,希望你得到了我的觀點 – Aparna

+0

是的。 OP使用laravel query bullder,它會根據需要生成查詢。問題出在數據類型上。 –

0

可以實現數字轉換這樣

->orderBy('students.attendance_count+0', 'desc') 
0

請確定students.attendance_count的列類型爲整數並寫入如下查詢

$students = DB::table('students')     
      ->select('students.*')    
      ->where('students.status','=','1') 
      ->orderBy('students.attendance_count', 'desc') 
      ->limit(4) 
      ->get(); 

它很好寫orderBylimitwhere條件。