我有一个病人数据库,一个病人可以有零个或病人有多少诊断。
我的目标是显示所有患者及其所有诊断的列表,每个患者及其诊断只有一行。
由于以前的开发人员的数据库结构,当我进行所需的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
3条答案
按热度按时间g6ll5ycj1#
我建议你用
GROUP_CONCAT
. 它将合并来自的所有多个记录DK Diagnoses
具有相同NO
使用如下特定分隔符放入一行:在这里,我把多个记录合并成一个记录的关键是
-[!$!]-
. 因此,现在,您将获得与唯一患者总数相同的记录数,但是他们的多个诊断将被分组到一个长字符串中-[!$!]-
钥匙。您可以在打印记录时循环打印所有唯一的患者
EMGDiagText
只是explode()
按指定的键并再次循环。例如希望它能帮助你解决问题。
dz6r00yl2#
对我来说,最简单的方法就是这样。
我希望这有帮助。
2lpgd9683#
你可以使用groupby和groupu concat
但是我建议用php来做这个,因为你在那里更灵活。比如在列表中显示诊断,而不是用逗号分隔。