首页 > 解决方案 > 如果它们共享相同的ID,则将它们附加在一起

问题描述

我有一个患者数据库,其中患者可以有零个或与患者一样多的诊断。

我的目标是显示所有患者及其所有诊断的列表,每个患者及其诊断只有一行。

由于前开发人员的数据库结构,当我进行所需的 SQL 查询时,我会为患者的每个诊断得到一行。有 2 个诊断的患者示例: 在此处输入图像描述

我的问题是这两个诊断是否有办法在同一行,因为它们都具有相同的 ID。所以我的所有患者列表只包含一行 pr。病人。

当我在 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

标签: phpmysql

解决方案


我建议你使用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

在这里,我将多条记录合并为一条的关键是-[!$!]-. 因此,现在,您将获得与唯一患者总数相同数量的记录,但他们的多个诊断将被分组到一个通过 -[!$!]-键联系的长字符串中。

您可以循环记录以打印所有唯一的患者,并在打印时EMGDiagTextexplode()按指定键并再次循环。例如

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>';
}

希望,它会帮助并解决您的问题。


推荐阅读