我正在尝试使用多个搜索选项,用户可以选择多个选项来过滤记录。
当用户不选择过滤选项时,默认情况下应返回所有记录。
这是我的SQL查询:
$query =
sprintf("SELECT * FROM users_leave_request
where leave_from >= '$leave_from'
AND leave_to <= '$leave_to'
AND leave_status = '$leave_stat'
AND user_id = '$emp_id'");
$result=$this->db->exec($query);
我打算做的是:
$leave_stat
参数为空,则应返回所有leave_stat
值的记录。$emp_id
为空,则应返回所有用户的记录。这有点像禁用*extra AND*
where参数为空时的条件。
我可以使用单个查询执行此操作,还是必须使用单独的查询? 很感谢任何形式的帮助。感谢。
答案 0 :(得分:4)
您可以在查询之前检查过滤条件,例如
$whrcondn="";
$whrcondn.=($leave_from)?" and leave_from > = '$leave_from'":"";
$whrcondn.=($leave_to)?" and leave_to < = '$leave_to'":"";
$whrcondn.=($leave_status)?" and leave_status = '$leave_stat'":"";
$whrcondn.=($emp_id)?" and user_id ='$emp_id'":"";
$query = sprintf("select * from users_leave_request where 1=1 $whrcondn");
答案 1 :(得分:1)
看看这个简单的方法 添加此条件
(clojure.repl/doc partition-by)
-------------------------
clojure.core/partition-by
([f] [f coll])
Applies f to each value in coll, splitting it each time f returns a
new value. Returns a lazy seq of partitions. Returns a stateful
transducer when no collection is provided.
然后将leave_status和user_id改为$ x和$ y,如下所示:
if(!empty($leave_stat))
{$x='leave_status';}
else
{$x='leave_status!';}
if(!empty($leave_stat))
{$y='user_id';}
else
{$y='user_id!';}
祝你好运