在以下示例中,有一个基本查询。可以动态添加其他参数以完成查询。
但是,我的基本查询没有子句WHERE。
处理它的最佳方法是什么。
如果我在基本查询中使用,例如, WHERE 1 = 1 ,它似乎可以解决,但我有一些疑问,这是一个正确的解决方案。
$myQuery = "SELECT fr.oranges, fr.aplles, fr.bananas,
FROM fruits fr
LEFT JOIN countrys ct ON fr.id_fruit = ct.id_fruit";
if(!empty($countrys){
$myQuery .= " AND countrys = ? ";
}
if(!empty($sellers){
$myQuery .= " AND seller = ? ";
}
$myQuery .=" GROUP BY fr.id_fruit ORDER BY fr.fruit ASC";
编辑:我修正了从$ empty到空的写作差距。
答案 0 :(得分:2)
您可以使用数组控制您的SQL:
$where = [];
if(!$empty($countrys){
$where[] = " countrys = ? ";
}
if(!$empty($sellers){
$where[] = " seller = ? ";
}
if(count($where) > 0) {
$myQuery .= " WHERE ".implode('AND', $where);
}
答案 1 :(得分:2)
WHERE 1=1
是一个简单的黑客行为,效果很好,因为它简化了代码。有一篇很棒的帖子here解释了WHERE 1=1
的效果含义。普遍的共识是它对性能没有影响。
此外,轻微注释($empty
)可能不是您定义的功能。我想你想要empty()
。你可以这样写:
$myQuery = "SELECT fr.oranges, fr.aplles, fr.bananas,
FROM fruits fr
LEFT JOIN countrys ct ON fr.id_fruit = ct.id_fruit";
$where = [];
if(!empty($countrys){
$where[] = "countrys = ?";
}
if(!empty($sellers){
$where[] = "seller = ?";
}
if (!empty($where)) {
$myQuery .= " WHERE " . implode(" AND ", $where);
}
$myQuery .= " GROUP BY fr.id_fruit ORDER BY fr.fruit ASC";