我通过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语句更好的方法来处理这个问题?
由于
答案 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
省略第二个语句具有相同的效果。