-3

我有这个未回答的问题,我有这个错误的结果查询:

SELECT
    t1.patient_id,
    CONVERT(aes_decrypt(t4.patient_name_en, :encKey) USING utf8mb4) as patient_name_en,
    min(t3.date_of_visit) as date_of_visit, 
    t2.diagnosis_name,
    max(ifnull(t5.date_of_assessment, 'N/A')) as date_of_assessment,
    ifnull(t5.assessment_result, 0) as assessment_result 
FROM consultation t1
LEFT JOIN diagnosis t2
    ON t1.diagnosis_id = t2.diagnosis_id
LEFT JOIN visit t3
    ON t3.visit_id = t1.visit_id
LEFT JOIN patient t4
    ON t4.patient_id = t3.patient_id
LEFT JOIN diabetes_assessment t5
   ON t5.patient_id = t4.patient_id
WHERE
   t2.diagnosis_name LIKE :diagName AND
   t1.clinic_id = :cid AND
   t3.visit_status=:visit_status
GROUP BY
    t1.patient_id,
    t2.diagnosis_name,
    t3.date_of_visit
    t4.patient_name_en,
    t5.date_of_assessment
    t5.assessment_result
ORDER BY t5.date_of_assessment DESC 

这给了我这个结果:

在此处输入图像描述

新事物是我尝试使用子查询循环以下查询patient_id

SELECT t1.patient_id,
    CONVERT(aes_decrypt(t4.patient_name_en, 'key1') USING utf8mb4) as patient_name_en,
    min(t3.date_of_visit) as date_of_visit, 
    t2.diagnosis_name,
    max(ifnull(t5.date_of_assessment, 'N/A')) as date_of_assessment,
    ifnull(t5.assessment_result, 0) as assessment_result 
FROM consultation t1
LEFT JOIN diagnosis t2 
    ON t1.diagnosis_id = t2.diagnosis_id
LEFT JOIN visit t3 
    ON t3.visit_id = t1.visit_id
LEFT JOIN patient t4 
    ON t4.patient_id = t3.patient_id
LEFT JOIN diabetes_assessment t5 
    ON t5.patient_id = t4.patient_id
WHERE t1.patient_id IN 
(SELECT t1.patient_id
FROM consultation t1
LEFT JOIN diagnosis t2 ON t1.diagnosis_id = t2.diagnosis_id
LEFT JOIN visit t3 ON t3.visit_id = t1.visit_id
LEFT JOIN patient t4 ON t4.patient_id = t3.patient_id
LEFT JOIN diabetes_assessment t5 ON t5.patient_id = t4.patient_id
WHERE t2.diagnosis_name LIKE '%Diabetes%' AND t1.clinic_id = '361'
AND t3.visit_status="Active"
GROUP BY t1.patient_id) AND
t2.diagnosis_name LIKE '%Diabetes%' AND t1.clinic_id = '361'
AND t3.visit_status="Active"
GROUP BY t1.patient_id, t5.date_of_assessment, t4.patient_name_en, t3.date_of_visit, t2.diagnosis_name, t5.assessment_result
ORDER BY t5.date_of_assessment DESC 

我得到了与上图相同的结果。

这是关于我的问题的 sql fiddle

我真正想要的是只显示以下两行,这意味着 group by patient_id

在此处输入图像描述

由于某些原因,我无法禁用该only_full_group_by模式,因为我阅读它可能会给出一些错误的结果

我试图只patient_id在小提琴中分组,显然它可以正常工作,因为小提琴有only_full_group_by残疾人。

我应该怎么办 ?

  1. 创建一个 PHP 解决方案,我将查询分成 2 个,第一个是子查询,我将在其中获取 ID,然后使用外部查询 aforeach使用 LIMIT 1 为每个 ID 获取一行?
  2. 或者禁用only_full_group_by mode哪个会影响我的应用程序中不同方面的其他查询?
  3. 创建一个 sql 存储过程而不是解决方案 #1 ?
4

2 回答 2

0

中的列GROUP BY必须是要返回的列。因此,而不是t5.评估it should just be结果评估结果because this is the alias of theIFNULL()` 表达式。

另外,你不应该在 中包含聚合函数的结果GROUP BY,所以不要在那里使用t5.date_of_assessmentor t3.date_of_visit

于 2017-08-01T06:16:26.827 回答
0

尝试使用 group_concat(column_name separator ', '). group_concat() 文档

它将帮助根据您想要的组连接行

于 2017-08-01T07:16:46.913 回答