如何在sql的WHERE子句中使用通配符char替换空变量

时间:2014-05-30 18:33:08

标签: php mysql

我通过ajax-post方法将两个变量传递给查询中的WHERE语句。第二个变量$ var2是可选的,它可能会也可能不会被发送。这意味着第二个变量可以为空,查询不会返回任何结果。

SELECT table1.*
        FROM table1
        LEFT OUTER JOIN table2 ON table1.table2_id = table2.id 
        WHERE table2.field1 = '".$var1."' AND table2.field2 = '".$var2."'
        ORDER BY table2.counter DESC
        LIMIT 10;

我的第一个想法是写if语句,比如

if(empty($var2)){
   query = ....WHERE table2.field1 = '".$var1."'...
}else{
   WHERE table2.field1 = '".$var1."' AND table2.field2 = '".$var2."'
}

第二个想法是将*通配符分配给$ var2,如果它是空的(这不起作用)。

是否有比if语句更好的方法来处理这个问题?

由于

2 个答案:

答案 0 :(得分:2)

我通常做这样的事情:

$descriptiveName = !empty($var2) ? "AND table2.field2 = '$var2'" : "";

"SELECT table1.*
FROM table1
LEFT OUTER JOIN table2 ON table1.table2_id = table2.id 
WHERE table2.field1 = '$var1'
$descriptiveName
ORDER BY table2.counter DESC
LIMIT 10"

如果$descriptiveName为空,那么会将$var2变量设置为空字符串(将被忽略)。以这种方式添加多个条件也很容易,但如果有太多条件,通常最好有两个单独的查询。

答案 1 :(得分:1)

这种方法是正确的;

if(empty($var2)){
   query = ....WHERE table2.field1 = '".$var1."'...
}else{
   WHERE table2.field1 = '".$var1."' AND table2.field2 = '".$var2."'
}

根据参数添加或取消查询。我认为没有像你想要的通配符。即使它不重要,因为使用if省略第二个语句具有相同的效果。