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

使用SELECT DISTINCT查询drug_code时合并同编码下全部drug_dosage的方法

解决方案

你需要同时修改后端Laravel查询逻辑和前端渲染代码,操作步骤如下:

1. 修改Controller查询代码

原有查询存在两处逻辑问题:

  • 使用了groupBy('bbr_drug_id'),而bbr_drug_id是表主键,每条记录值唯一,无法实现按drug_code分组的效果
  • distinct('drug_code')在搭配group by的场景下不需要额外使用,直接通过分组聚合即可实现去重+合并字段的需求
    修改后的代码如下:
public function fetchdrug(Request $search_drug){
    $filter_drug = $search_drug->input('search_drug');
    $all_drugs = HmsBbrKnowledgebaseDrug::selectRaw('drug_code, drug_name, GROUP_CONCAT(distinct drug_dosage SEPARATOR ", ") as merged_dosage')
        ->when(is_null($filter_drug), function ($query) {
            $query->where('bbr_drug_id', '>=', 1);
        })
        ->when(!empty($filter_drug), function ($query) use ($filter_drug) {
            $query->where('drug_name', 'iLIKE', "%$filter_drug%");
        })    
        ->groupBy('drug_code', 'drug_name')
        ->get();
    return response()->json([
        'all_drugs'=>$all_drugs,
    ]);
}

注:如果你使用的是PostgreSQL数据库,把GROUP_CONCAT(distinct drug_dosage SEPARATOR ", ")替换为string_agg(distinct drug_dosage, ', ') as merged_dosage即可

2. 修改前端表格渲染代码

把原前端中「Additional Information」列的渲染值替换为后端返回的合并后字段即可:

<td class="p-1"><p class="font-weight-bold m-0">Additional Information:</p>
    ${drug.merged_dosage}
</td>

可选调整说明

  • 聚合函数里加了distinct是为了避免同个drug_code下出现重复的dosage值,如果业务需要保留重复值可以去掉
  • MySQL的GROUP_CONCAT默认有长度限制,如果你的dosage值非常多,可以在SQL中临时调整group_concat_max_len参数适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:06:02