我正在尝试找到最有效(或者更合适的方式)来过滤MySQL查询。
我想要实现的是从大约20个复选框(我用来过滤结果)的列表中查看哪一个被“检查”,以及是否“检查”它们以便在之后添加它们WHERE子句。
当他们“检查”$var = '1'
时,它为NULL。
我到目前为止所做的是将它们混合在一起,但是有20多个过滤器就像o_O
if ($var1 == '1') {
$query = "SELECT * FROM table WHERE var1 = '1';";
..
} elseif ($var2 == '1') {
$query = "SELECT * FROM table WHERE var2 = '1';";
..
} elseif ($var1 == '1' AND $var2 == '1') {
$query = "SELECT * FROM table WHERE var1 = '1' AND var2 = '1';";
..
}
20多个过滤器的组合似乎有点愚蠢..是否有更简单的方式来放置IF $var1 != NULL THEN WHERE var1 = '1'
?
谢谢!
答案 0 :(得分:0)
for($i=1;$i<=20;$i++)
{
if (${'var'.$i} == '1' && ${'var'.$i+1} == '1')
{
$query = "SELECT * FROM table WHERE var$i = '1' AND var.$i+1 = '1';";
}
else if (${'var'.$i} == '1')
{
$query = "SELECT * FROM table WHERE var$i = '1';";
}
}
答案 1 :(得分:0)
假设您已将复选框命名为cb
的数组,因此您可以将其值用作
$cb=$_POST['cb'];
$q='';
for($i=0;$i<count($cb);$i++)
{
if(isset($cb[$i])&&$cb[$i]!='')
{
$q.=' AND var'.($i+1).'=1';
}
}
$q=trim(' AND');//removes AND from start of string
$query="SELECT * FROM table where $q";
答案 2 :(得分:0)
这应该做你需要的:
$var1 = '1';
$var2 = '0';
$var3 = '1';
$where = array('1 = 1');
foreach (array('var1', 'var2', 'var3') as $var)
{
if ('1' == $$var)
{
$where[] = "$var = '1'";
}
}
// SELECT * FROM table WHERE 1 = 1 AND var1 = '1' AND var3 = '1'
echo $query = 'SELECT * FROM table WHERE ' . implode(' AND ', $where);
答案 3 :(得分:0)
这里有几个有用的解决方案;这个将基于编号的var方案工作,并将任何变量(如果它有长度)添加到查询,而不仅仅是1.
您可以在此处看到它:https://eval.in/94701
以下是一些设置变量:
$numberOfVars = 3;
$var1=4;
$var2=5;
$var3='';
请注意,$thevar
实际上为每次迭代保留var1,var2等的值:
$query = "SELECT * FROM table WHERE 1=1 ";
for($i=1;$i<=$numberOfVars;$i++) {
$thevar = ${'var'.$i};
if ( strLen($thevar) ) {
$query .= " AND var$i = '$thevar' ";
}
}