SQL Logical" AND"操作者

时间:2017-03-24 20:27:03

标签: sql wordpress select operators

SELECT user_id 
FROM $wpdb->usermeta 
WHERE (meta_key = 'first_name' AND meta_value LIKE $var1) AND (meta_key = 'age' AND meta_value = $var2)
GROUP BY user_id

这个SQL查询是否正确?

我可以使用这样的AND运算符吗(meta_key = 'first_name' AND meta_value LIKE $var1) AND (meta_key = 'age' AND meta_value = $var2)吗?

1 个答案:

答案 0 :(得分:1)

您可以使用and逻辑运算符。但是,where子句单独应用于每一行,因此无法实现您尝试获得的结果。处理此类问题的一种方法是在where子句中包含若干条件,并使用having子句检查其中有多少条件得到满足:

SELECT   user_id 
FROM     $wpdb->usermeta 
WHERE    (meta_key = 'first_name' AND meta_value LIKE $var1) OR
         (meta_key = 'age' AND meta_value = $var2)
GROUP BY user_id
HAVING   COUNT(DISTINCT meta_key, meta_value) = 2

强制性评论:编写这样的代码可能会使您的代码容易受到SQL注入攻击。您应该考虑使用prepared statement而不是变量替换。