使用多个可选搜索字段创建MYSQL查询

时间:2017-10-01 13:26:25

标签: php mysql pdo

我正在创建一个用户搜索,用户可以根据用户名,语言和/或位置搜索其他用户。至少需要一个字段,例如,您可以只搜索用户名,或用户名和位置等。

我在编写MYSQL查询时遇到困难,考虑到某些参数可能为空。我现在尝试使用最多两个参数:

PHP / MYSQL(PDO)

$data = json_decode(file_get_contents("php://input"));
$user = $data->user; //'null' if left blank 
$location = $data->location; //'null' if left blank


$sql = "SELECT user, spokenLanguages, profileImage 
        FROM users WHERE user LIKE :user 
        AND (town = LOWER(:location) OR country = LOWER(:location))";

如果定义了$ user和$ location,这非常有效,但是如果定义$ user并且$ location不等于null,我只需要包含位置WHERE子句。同样,如果定义$ location并且$ user为null,则不应考虑用户子句。有什么快速的方法可以做到这一点,我不知道吗?或者是使用if / else语句扩展查询的情况?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

根据定义的条件,最好构建不同的查询。这样可以更容易地优化它们。

如果你想把逻辑放在一个查询中,我想你想要:

WHERE (:user IS NULL OR user LIKE :user) AND
      (:location IS NULL OR LOWER(:location) IN (town, country))