You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel:如何筛选出需学生重提交的问题(基于最新记录)

筛选学生需重提交的问题ID(Laravel实现)

要找出指定学生名下,**最新答案状态为'reSubmit'**的question_id,核心是先定位每个问题的最新记录,再筛选状态。直接用groupBy('question_id')会默认取分组内的第一条记录,而非最新的,所以得换思路:

方法一:子查询定位最新记录

利用子查询先获取每个question_id对应的最新记录ID(假设ID自增,最新记录ID最大),再关联原表筛选状态:

$studentId = 你要查询的学生ID;

$resubmitQuestionIds = Answer::where('student_id', $studentId)
    // 子查询:获取当前学生每个问题的最新记录ID
    ->whereIn('id', function ($query) use ($studentId) {
        $query->select(DB::raw('MAX(id)'))
            ->from('answers')
            ->where('student_id', $studentId)
            ->groupBy('question_id');
    })
    // 筛选最新记录状态为'reSubmit'的
    ->where('status', 'reSubmit')
    // 提取目标question_id
    ->pluck('question_id');

方法二:用joinSub关联最新记录

先分组得到每个问题的最新记录ID,再通过关联查询筛选状态:

$studentId = 你要查询的学生ID;

// 第一步:获取每个问题的最新记录ID
$latestAnswerSub = Answer::select('question_id', DB::raw('MAX(id) as latest_id'))
    ->where('student_id', $studentId)
    ->groupBy('question_id');

// 第二步:关联原表,筛选状态为'reSubmit'的记录
$resubmitQuestionIds = Answer::joinSub($latestAnswerSub, 'latest_answers', function ($join) {
        $join->on('answers.id', '=', 'latest_answers.latest_id');
    })
    ->where('answers.status', 'reSubmit')
    ->pluck('answers.question_id');

注意事项

  • 如果你的表用created_at判断最新记录,可将MAX(id)替换为MAX(created_at),但建议用ID(避免同一时间多条提交的冲突)。
  • 确保student_id索引已建立,提升查询效率。

内容的提问来源于stack exchange,提问作者mohammed asheek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 11:37:06