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

Laravel 8中使用Select DISTINCT查询仍返回重复数据问题

问题根因

  • 首先distinct()方法用法错误:Laravel 查询构造器的 distinct() 不接受参数,作用是对返回的整行全部字段做去重。你返回的两条 gpid=83 的记录,id、student_id 字段值均不相同,整行不属于重复数据,因此去重逻辑不会生效。
  • 关联逻辑导致多返回行:你使用的关联规则是 tickets.id = gp_groups.gpid,同一个 gp 分组(gpid=83)对应了2条 tickets 表记录(id 分别为 109、110),关联查询后自然会返回2行结果,这是出现同gpid多条记录的核心原因。

解决方案

根据你的业务需求(每个gpid仅返回一条对应记录),可选择以下两种方案:

  1. 若不需要获取tickets表的字段,直接查询gp_groups表即可,无需关联:
$res = DB::table('gp_groups')
    ->where('supervisor_id', 15)
    ->groupBy('gpid')
    ->get();
  1. 若需要关联获取tickets表的字段,使用groupBy按gpid分组即可:
$res = DB::table('tickets')
    ->join('gp_groups', 'tickets.id', '=', 'gp_groups.gpid')
    ->where('gp_groups.supervisor_id', 15)
    ->groupBy('gp_groups.gpid')
    // 如需取最新的对应ticket记录,可添加排序规则
    ->orderBy('tickets.id', 'desc')
    ->get();

注意:如果数据库开启了ONLY_FULL_GROUP_BY规则,需要明确指定所有非聚合字段的取值规则,或者临时关闭该规则避免报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:54:02