У меня есть этот без ответа вопрос, где у меня был этот ошибочный запрос результата:
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 о моей проблеме
Что я действительно хочу, так это показать только следующие две строки, что означает группировку по patient_id
.
И по нескольким причинам я не могу отключить режим only_full_group_by
, потому что я читал, что это может привести к ошибочному результату.
Я попытался сгруппировать только по patient_id
в скрипке, и, по-видимому, она работает правильно, потому что в скрипке отключен only_full_group_by
.
Что я должен делать ?
- Создайте решение PHP, в котором я разбиваю запрос на 2, первый — это подзапрос, в котором я получу идентификаторы, а затем использую внешний запрос в
foreach
, чтобы получить строку для каждого идентификатора, используя LIMIT 1? - Или отключить
only_full_group_by mode
, который повлияет на другие мои запросы в моем приложении по разным аспектам? - Создать хранимую процедуру sql вместо решения №1?
only_full_group_by
что-нибудь сломает? Это позволяет использовать более слабый тип запроса, но существующие запросы, которые правильно используютGROUP BY
, не должны быть затронуты (я думаю). - person Tim Biegeleisen   schedule 01.08.2017diabetes
, а иногда у пациента диагностируются разные его типы. Чего я хочу, так это посетить его в первый раз, когда ему поставили какой-либо диагноз, и показать это. См. id=361-9001
, у него было диагностировано два типа, что меня волнует, так это показать одну строку с первой датой - person alim1990   schedule 01.08.2017