来自一个 table 数据的 laravel 中的排名查询

rank query in laravel from one table data

目前它按顺序获得比赛时间,但我想将 user_id 列组合在一起,但要确保将其组合在一起时,保持最快的 recorded_time。

到目前为止我从查询中获得的示例

 User_id | race_id | recorded_time | stroke | 
 __________________________________________
    2    |    2    |     10.03     |  fly   |
 ____________________________________________
    1    |    3    |     12.98     |  fly   |
 ____________________________________________
    2         3          13.58     |  fly   |

这是给出结果的代码

  $query->where('race_history.stroke', '=', $stroke)
        ->orderBy('recorded_time', 'ASC')->get();

这就是我想要的 return

 User_id | race_id | recorded_time | stroke | 
 __________________________________________
    2    |    2    |     10.03     |  fly   |
 ____________________________________________
    1    |    3    |     12.98     |  fly   |
 ____________________________________________

我已经尝试了下面的代码,但它并没有花费最快的记录时间

$query->where('stroke', '=', $stroke)
      ->orderBy('recorded_time', 'ASC')
      ->groupBy('user_id')->get();

而是产生这个

 User_id | race_id | recorded_time | stroke | 
 __________________________________________
    1    |    3    |     12.98     |  fly   |
 ____________________________________________
    2    |    3    |     13.58     |  fly   |
 ____________________________________________

所以它按 user_id 分组,但没有用最快的记录时间

我已经尝试了很多任何人都可以提供帮助的方法这是一个原始查询来获得我想要的东西我会使用它但是 AND 距离不喜欢这样..

$total = DB::select(DB::raw('
    SELECT *, min(recorded_time) as time
    FROM race_history
    WHERE stroke = "' . $stroke . '" AND distance="' . $distance . '" 
    GROUP BY user_id 
    ORDER BY min(recorded_time) ASC
'));

这是原始查询,因为我不知道 laravel 语法

SELECT `user_id`, `race_id`, min(`recorded_time`) AS `recorded_time`, `stroke`
FROM `race_history`
WHERE `stroke` = 'fly'
GROUP BY `user_id`
ORDER BY `recorded_time` ASC