我正在创建一个用户搜索,用户可以根据用户名,语言和/或位置搜索其他用户。至少需要一个字段,例如,您可以只搜索用户名,或用户名和位置等。
我在编写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语句扩展查询的情况?
任何帮助将不胜感激。
答案 0 :(得分:2)
根据定义的条件,最好构建不同的查询。这样可以更容易地优化它们。
如果你想把逻辑放在一个查询中,我想你想要:
WHERE (:user IS NULL OR user LIKE :user) AND
(:location IS NULL OR LOWER(:location) IN (town, country))