没有子句的mysql动态查询

时间:2018-01-24 16:08:26

标签: php mysql

在以下示例中,有一个基本查询。可以动态添加其他参数以完成查询。

但是,我的基本查询没有子句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到空的写作差距。

2 个答案:

答案 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";