我有this unanswered question在那里我有这个错误的结果查询得到,因为只有完全组的模式的错误结果:MySQL查询通过
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
而且我已经得到以高于图像显示同样的结果。
Here is the an sql fiddle about my problem
我真正想要的是仅显示以下两排它通过patient_id
意味着组。
而对于几个原因,我不能禁用only_full_group_by
模式,因为我读它可能会给一些错误的结果。
我试图只用patient_id
在小提琴中分组,显然它工作正常,因为小提琴的only_full_group_by
禁用。
我该怎么办?
- 创建一个PHP解决方案,其中我中断查询到2,第一个是在子查询,其中我将获得的ID,然后使用外部查询在
foreach
获得行使用LIMIT 1每个ID ? - 或禁用
only_full_group_by mode
这会影响我的其他在我的各方面应用的查询? - 创建存储的过程,而不是将溶液#1中的SQL?
这个查询是一个烂摊子,我不会尝试的答案,但我会问你为什么想到关闭'only_full_group_by'模式会_什么都没有?它允许一种更宽松的查询类型,但正确使用“GROUP BY”的现有查询不应受到影响(我认为)。 –
该查询是多个表的简单左连接。而已。 – droidnation
不清楚你的目标..为什么你只想为病人两行..为什么不是别人诊断.. ????? ..尝试解释你想要什么..你想要第一次诊断? – scaisEdge