php - 如果它们共享相同的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
解决方案
我建议你使用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>';
}
希望,它会帮助并解决您的问题。
推荐阅读
- html - HTML:如何对齐左、中和右页脚短语。引导程序
- java - JVM MaxHeapSize := 0 - 这是什么意思?
- reactjs - 使用多个获取请求在渲染之前获取
- r - 在对 ggplot 的调用中通过 paste0() 引用变量
- html - 如何在隐藏复选框的 CSS 中为复选框添加边距?
- python - 在循环结束时合并数据框以进行网页抓取
- apache-spark - 如何在 Spark 结构化流中仅流式传输旧文件中的新数据(新附加)?
- php - PHP 7GB 文件下载在 3GB 到 4.5GB 之间提前停止
- python - 使用 linecache 时跳过文件的第一行
- laravel - Laravel 错误 - 更新时不允许发布方法(使用 @method('put))