我想显示按 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);
}
关于php - 如果 WHERE 子句为空则忽略条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44312934/