【问题标题】:SQL Logical "AND" operatorSQL 逻辑“与”运算符
【发布时间】:2017-03-24 20:27:02
【问题描述】:
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 查询是否正确?

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

【问题讨论】:

  • 你有错误吗?
  • 它总是返回 0 行。 meta_key 不能同时等于 'first_name' 等于 'age'。再加上你的 GROUP BY 没有聚合是没有意义的。
  • 查询对我不起作用。如果我将 1 AND 运算符更改为 OR,那么它可以工作。像这样(meta_key = 'first_name' AND meta_value LIKE $var1) OR (meta_key = 'age' AND meta_value = $var2)

标签: sql wordpress select operators


【解决方案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 而不是变量替换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 2023-03-31
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多