2017-07-27 16 views
-1

私はクラスで最も高い出席者がない上位5人の学生の詳細を探したかったのです。取得するために、私は次のクエリを使用しました。しかし、学生が7 9 12 15 1 10のようなattendance_countを持っている場合、それは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

あなたはこの

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

'limit'はすでにそこにあります。 –

+0

制限は既に存在します。しかし、一度注文すれば、それを制限すると制限されるはずです。テーブルの最初の4行をフェッチし、最大の出席数を持つ4行はフェッチしません。私のポイントがあることを祈ってください。 – Aparna

+0

はい。 OPはlaravel query bullderを使用しており、必要に応じてクエリを生成します。問題はデータ型にあります。 –

0

あなたの問題解決しますwhere句の後に使用しなければならないことで、リミット句の前にオーダーしてくださいstudents.attendance_countの列のタ​​イプがの整数であることを確認し、

のようなクエリを作成してください where条件の後 orderBylimitを書くため
$students = DB::table('students')     
      ->select('students.*')    
      ->where('students.status','=','1') 
      ->orderBy('students.attendance_count', 'desc') 
      ->limit(4) 
      ->get(); 

その良いです。

0

のように数値変換を達成することができます

select student.* 
from students 
where status=1 
order by attendence desc 
limit 4; 
関連する問題