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)
吗?
答案 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而不是变量替换。