[英]Ignore conditions in WHERE clause if empty
我想顯示通過WHERE
子句過濾的數據。 我已經應用了一些變量來代替條件值,現在如何在不應用條件的情況下獲取數據。 我試過了,但是。 如果給出了值,它是有效的,但是如果沒有給出值,則它不起作用。
應該怎么辦?
它有3個過濾器。 如果選擇了日期 ,則應按給定日期顯示數據。 同樣,如果選擇了來源 ,則應該在給定日期和給定來源之前顯示數據。 這樣,它應該可以工作。
$date_from = NULL; //the value will be given if the user selects the date range
$date_to = NULL;
$src_id = NULL; // this value will be given if the user wants data from specific source
$gndr_id = NULL; // if user want data by gender
$leadSql = "SELECT
lead.id as lead_id
, lead.name as lead_name
, lead.phone as lead_phone
, lead.email as lead_email
, gender.name as lead_gender
, treatment.name as treatment_name
, lead.date as lead_date
, source.name as source_name
, status.name as status_name
, lead.remark as lead_remark
FROM lead
join treatment on treatment.id = lead.treatment_id
join gender on gender.id = lead.gender_id
join source on source.id = lead.source_id
join status on status.id = lead.status_id
where (lead.date BETWEEN $date_from and $date_to) and
(lead.source_id = $src_id ) and (lead.gender_id = $gndr_id)
ORDER BY lead_date DESC";
請建議我一些方法。
據我所知,您需要在一條專用語句中包括整個WHERE行,以說明是否存在值,如果不忽略它,則應用WHERE子句。
if($date_from != NULL && $date_to != NULL .....){
$where_clause = "where (lead.date BETWEEN $date_from and $date_to) and
(lead.source_id = $src_id ) and (lead.gender_id = $gndr_id)";
} else{
$where_clause ="";
}
$leadSql = "SELECT
lead.id as lead_id
, lead.name as lead_name
, lead.phone as lead_phone
, lead.email as lead_email
, gender.name as lead_gender
, treatment.name as treatment_name
, lead.date as lead_date
, source.name as source_name
, status.name as status_name
, lead.remark as lead_remark
FROM lead
join treatment on treatment.id = lead.treatment_id
join gender on gender.id = lead.gender_id
join source on source.id = lead.source_id
join status on status.id = lead.status_id
".$where_clause."
ORDER BY lead_date DESC";
您可以根據需要調整if / else。 這是最簡單的解決方案。 您可以為每個變量編寫一個條件語句,並在最后將它們連接在一起。
$where = [];
$where_clause = '';
if ($date_from && $date_to) {
$where[] = "(lead.date BETWEEN $date_from and $date_to)";
}
if ($src_id) {
$where[] = "(lead.source_id = $src_id )";
}
if ($gndr_id) {
$where[] = "(lead.gender_id = $gndr_id)";
}
if (count($where)) {
$where_clause = 'WHERE ' . implode(' AND ', $where);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.