繁体   English   中英

有条件地管理 php 中的 mysql 查询

[英]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 您可能希望在joinon子句中使用此条件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM