首页 > 解决方案 > SQL:选择不同但将所有一列添加到不同的结果

问题描述

表输出:

      data: {search_drug: search_drug},
      success: function (response){
          var tbody="";
          $.each(response.all_drugs, function (key, drug) {
          tbody+=`
                      <tr>
                          <td class="p-1">${drug.drug_name}</td>
                          <td class="p-1">${drug.drug_code}</td>
                          <td class="p-1"><p class="font-weight-bold m-0">Additional Information:</p>
                              ${drug.drug_dosage}
                          </td>
                      </tr>`;
          });

          $('tbody').html(tbody) }

控制器:

public function fetchdrug(Request $search_drug){

    $filter_drug = $search_drug->input('search_drug');
    $all_drugs = HmsBbrKnowledgebaseDrug::distinct('drug_code')
                                          ->when(is_null($filter_drug), function ($query) {
                                              $query->where('bbr_drug_id', '>=', 1);
                                          })
                                          //iLike is case insensitive
                                          ->when(!empty($filter_drug), function ($query) use ($filter_drug) {
                                              $query->where('drug_name', 'iLIKE', "%$filter_drug%");;
                                          })    
                                          ->groupBy('bbr_drug_id')
                                          ->get();

    return response()->json([
        'all_drugs'=>$all_drugs,
    ]);
}

SQL 表:

1

我的第一个目标是SELECT DISTINCTdrug_code的桌子。我的问题是数据不同drug_dosagedrug_code相同。

所以我需要在下面的表格 UI 中做的是,在“附加信息”下,我需要编译所有drug_dosage并将它们放在一行中:

2

例如,当我选择drug_code“CFZU”时,它会列出drug_dosage如下:“<=4 mg/L, <=3 mg/L”

如何修改下面的代码,以便SELECT DISTINCT在同时使用时可以选择一列中的多个?

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

标签: laravelfunctionselecteloquent

解决方案


您可以使用GROUP_CONCAT

如果您没有使用 DB,请先在 laravel 中使用它

public function fetchdrug(Request $search_drug){

    $filter_drug = $search_drug->input('search_drug');
    $all_drugs = HmsBbrKnowledgebaseDrug::select('drug_code', 'drug_name', DB::raw("GROUP_CONCAT(drug_dosageSEPARATOR ', ') as other_detail"))
                                          ->when(is_null($filter_drug), function ($query) {
                                              $query->where('bbr_drug_id', '>=', 1);
                                          })
                                          //iLike is case insensitive
                                          ->when(!empty($filter_drug), function ($query) use ($filter_drug) {
                                              $query->where('drug_name', 'iLIKE', "%$filter_drug%");;
                                          })    
                                          ->groupBy('drug_code')
                                          ->groupBy('bbr_drug_id')
                                          ->get();

    return response()->json([
        'all_drugs'=>$all_drugs,
    ]);
}

推荐阅读