【问题标题】:How can I get first top 4 highest values?如何获得前 4 个最高值?
【发布时间】:2017-07-27 06:37:08
【问题描述】:

我想找到班级出勤率最高的前 5 名学生详细信息。为了得到我使用了以下查询。但是,问题是如果学生有attendance_count7 9 12 15 1 10 一样,虽然它应该返回9 10 12 15,但它返回9 7 15 12 (attendance_count) 学生详细信息。我该如何解决这个问题?

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

【问题讨论】:

  • 您的数据库列可能是 varchar 吗?将其更改为整数。
  • 您是否将其保存为整数?或者,也许您创建了一个 var_char 字段。如果你在某处有一个空格字符,它会弄乱排序。
  • 向我们展示迁移。
  • 感谢@Daan 解决了它! :)

标签: php mysql sql laravel


【解决方案1】:

可以这样实现数值转换

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

【讨论】:

    【解决方案2】:

    请确保 students.attendance_count 的列类型为 Integer 并像这样编写查询

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

    where 条件之后写orderBylimit 很好。

    【讨论】:

      【解决方案3】:

      order by 应该在 where 子句之后和 limit 子句之前使用,这将解决您的问题

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

      【讨论】:

      • 限制已经存在。但是一旦你订购了它,那么只有你应该限制它,如果你在此之前限制它会获取表的前 4 行,而不是获取最大出席人数的 4 行,希望你明白我的意思
      • 是的。 OP 正在使用 laravel 查询 Bullder,它将根据需要生成查询。问题在于数据类型。
      • 感谢您让我知道这一点
      猜你喜欢
      • 2020-09-16
      • 1970-01-01
      • 2018-09-01
      • 2014-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多