簡體   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