2017-08-01 114 views
-3

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

,給了我這樣的結果:

enter image description here

新的事情是,我嘗試使用子查詢環路下面的查詢通過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意味着組。

enter image description here

而對於幾個原因,我不能禁用only_full_group_by模式,因爲我讀它可能會給一些錯誤的結果

我試圖只用patient_id在小提琴中分組,顯然它工作正常,因爲小提琴的only_full_group_by禁用。

我該怎麼辦?

  1. 創建一個PHP解決方案,其中我中斷查詢到2,第一個是在子查詢,其中我將獲得的ID,然後使用外部查詢在foreach獲得行使用LIMIT 1每個ID ?
  2. 或禁用only_full_group_by mode這會影響我的其他在我的各方面應用的查詢?
  3. 創建存儲的過程,而不是將溶液#1中的SQL?
+0

這個查詢是一個爛攤子,我不會嘗試的答案,但我會問你爲什麼想到關閉'only_full_group_by'模式會_什麼都沒有?它允許一種更寬鬆的查詢類型,但正確使用「GROUP BY」的現有查詢不應受到影響(我認爲)。 –

+1

該查詢是多個表的簡單左連接。而已。 – droidnation

+0

不清楚你的目標..爲什麼你只想爲病人兩行..爲什麼不是別人診斷.. ????? ..嘗試解釋你想要什麼..你想要第一次診斷? – scaisEdge

回答

0

GROUP BY中的列必須是要返回的列。因此,而不是t5. assessment_result it should just be assessment_result because this is the alias of the IFNULL()`的表達。

另外,您不應該在GROUP BY中包含聚合函數的結果,所以請不要在那裏使用t5.date_of_assessmentt3.date_of_visit

+0

它沒有工作 – droidnation

0

嘗試使用 group_concat(column_name separator ', ')group_concat() doc

這將有助於串連根據你幾乎需要的組行