我有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