[英]Conditionally manage a mysql query in php
我有一個查詢,我在哪里獲取學生人數。 現在,我想修改該查詢並有條件地管理它。 這是我的查詢
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
但是,只有當 $admission_date 不是 null 時,我才想添加AND students_admission.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
返回語法錯誤。 我該如何管理?
只需使用 boolean 邏輯:
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 帖子。
另外,請注意,將條件放在查詢的where
子句中的left join
表上實際上會將left join
變為inner join
。 您可能希望在join
的on
子句中使用此條件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.