如果行共享相同的id,则将它们附加在一起

xhv8bpkk  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(290)

我有一个病人数据库,一个病人可以有零个或病人有多少诊断。
我的目标是显示所有患者及其所有诊断的列表,每个患者及其诊断只有一行。
由于以前的开发人员的数据库结构,当我进行所需的sql查询时,我会为患者的每个诊断获取一行。有2个诊断的患者示例:在此处输入图像描述
我的问题是,如果有一种方式,这两个诊断将在同一行,因为他们都有相同的id。所以我的名单上所有病人只包含一行公关病人。
当我用php输出数据时,我给php和mysql加了标签,我想如果不能用sql,也许可以用php完成?
这是我用来展示一个有两个诊断的病人的查询。我使用相同的查询来显示所有患者,只是选择了一些列,没有where语句。

SELECT `DK Diagnoses`.`No`,`DK Diagnoses`.`EMGDiagText`
FROM `DK Diagnoses`
JOIN `PATIENTINFO` ON `DK Diagnoses`.`No` = `PATIENTINFO`.`Exam`
JOIN `SEXCODE` ON `PATIENTINFO`.`Sex` = `SEXCODE`.`SexCode`
JOIN `PROBABILITYCODE` ON `DK Diagnoses`.`Prob` = `PROBABILITYCODE`.`Code`
JOIN `EXAMINFO` ON `PATIENTINFO`.`Exam` = `EXAMINFO`.`Exam`
JOIN `REFTYPE` ON `EXAMINFO`.`RefSource` = `REFTYPE`.`Refsource`
WHERE `DK Diagnoses`.`LabCode` = "Gold" AND  `DK Diagnoses`.`No` = 2598
ORDER BY `DK Diagnoses`.`No` DESC
g6ll5ycj

g6ll5ycj1#

我建议你用 GROUP_CONCAT . 它将合并来自的所有多个记录 DK Diagnoses 具有相同 NO 使用如下特定分隔符放入一行:

SELECT `DK Diagnoses`.`No`, GROUP_CONCAT(`DK Diagnoses`.`EMGDiagText` separator '-[!$!]-') AS `EMGDiagText`
FROM `DK Diagnoses`
JOIN `PATIENTINFO` ON `DK Diagnoses`.`No` = `PATIENTINFO`.`Exam`
JOIN `SEXCODE` ON `PATIENTINFO`.`Sex` = `SEXCODE`.`SexCode`
JOIN `PROBABILITYCODE` ON `DK Diagnoses`.`Prob` = `PROBABILITYCODE`.`Code`
JOIN `EXAMINFO` ON `PATIENTINFO`.`Exam` = `EXAMINFO`.`Exam`
JOIN `REFTYPE` ON `EXAMINFO`.`RefSource` = `REFTYPE`.`Refsource`
WHERE `DK Diagnoses`.`LabCode` = "Gold" AND  `DK Diagnoses`.`No` = 2598
GROUP BY `DK Diagnoses`.`No`
ORDER BY `DK Diagnoses`.`No` DESC

在这里,我把多个记录合并成一个记录的关键是 -[!$!]- . 因此,现在,您将获得与唯一患者总数相同的记录数,但是他们的多个诊断将被分组到一个长字符串中 -[!$!]- 钥匙。
您可以在打印记录时循环打印所有唯一的患者 EMGDiagText 只是 explode() 按指定的键并再次循环。例如

foreach($result as $row){
    echo '<tr><td>Patient no:- '. $row['No'] . '</td>';
    $diags = explode('-[!$!]-', $row['EMGDiagText']);
    if(!empty($diags)){
        echo '<td><table>';
        foreach($diags as $key => $data){
            echo '<tr><td>Diagnoses ' . ($key+1) . '). ' . $data . '</td></tr>';
        }
        echo '</table></td>';
    } else {
        echo '<td>No Diagnoses</td>';
    }
    echo '</tr>';
}

希望它能帮助你解决问题。

dz6r00yl

dz6r00yl2#

对我来说,最简单的方法就是这样。

SELECT No, GROUP_CONCAT(EMGDiagText) FROM diagnoses GROUP BY No;

我希望这有帮助。

2lpgd968

2lpgd9683#

你可以使用groupby和groupu concat

SELECT `DK Diagnoses`.`No`,GROUP_CONCAT(`DK Diagnoses`.`EMGDiagText`)
FROM `DK Diagnoses`
JOIN `PATIENTINFO` ON `DK Diagnoses`.`No` = `PATIENTINFO`.`Exam`
JOIN `SEXCODE` ON `PATIENTINFO`.`Sex` = `SEXCODE`.`SexCode`
JOIN `PROBABILITYCODE` ON `DK Diagnoses`.`Prob` = `PROBABILITYCODE`.`Code`
JOIN `EXAMINFO` ON `PATIENTINFO`.`Exam` = `EXAMINFO`.`Exam`
JOIN `REFTYPE` ON `EXAMINFO`.`RefSource` = `REFTYPE`.`Refsource`
WHERE `DK Diagnoses`.`LabCode` = "Gold" AND  `DK Diagnoses`.`No` = 2598
GROUP BY `DK Diagnoses`.`No`
ORDER BY `DK Diagnoses`.`No` DESC

但是我建议用php来做这个,因为你在那里更灵活。比如在列表中显示诊断,而不是用逗号分隔。

相关问题