[英]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.