Условно управляйте запросом mysql в php - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть запрос, где я получаю количество студентов. Теперь я хочу изменить этот запрос и управлять им условно. Вот мой запрос

SELECT count(students.id) AS student_count,
FROM students
LEFT JOIN students_admission ON students_admission.student_id = students.id
WHERE student_gender='Male'
AND students.address = 'Address'
GROUP BY id

Это то, что я хочу

$admission_date = null;

SELECT count(students.id) AS student_count,
FROM students
LEFT JOIN students_admission ON students_admission.student_id = students.id
WHERE student_gender='Male'
AND students.address = 'Address'
AND students_admission.admission_date = '$admission_date'
GROUP BY id

Но я хочу добавить AND students_admission.admission_date = 'admission_date' это условие, только когда $ admission_date не равно нулю. Итак, я попытался это

SELECT count(students.id) AS student_count,
FROM students
LEFT JOIN students_admission ON students_admission.student_id = students.id
WHERE student_gender='Male'
AND students.address = 'Address'
CASE WHEN '$admission_date' IS NOT NULL THEN students_admission.admission_date = '$admission_date' END
GROUP BY id

, который возвращает синтаксическую ошибку. Как я могу справиться с этим?

1 Ответ

1 голос
/ 20 апреля 2020

Просто используйте логические логики c:

AND (
    :admission_date IS NULL 
    OR students_admission.admission_date = :admission_date
)

Вы также можете сформулировать это следующим образом:

students_admission.admission_date = coalesce(:admission_date, students_admission.admission_date)

Обратите внимание, что вы должны использовать параметризованные запросы, а не смешивать строковые переменные в строка запроса: это и более эффективно, и более безопасно (ваш текущий код широко подвергается SQL внедрению). См. этот знаменитый пост SO , чтобы узнать, почему и как.

Также обратите внимание, что наложение условий в таблицу left join ed в предложении where запроса фактически превращает left join до inner join. Вы, вероятно, хотите использовать это условие в предложении on join.

...