SQL查询没有获得多个AND的结果

时间:2015-09-15 09:48:38

标签: mysql sql

我有一个SQL查询来从MySQL数据库中获取数据:

SELECT wp_users.ID, wp_users.time, wp_users.display_name 
FROM wp_users 
INNER JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id 
WHERE wp_usermeta.meta_key = 'wp_capabilities' 
AND wp_usermeta.meta_value LIKE '%user%' 
AND wp_users.time >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 MINUTE)) 
ORDER BY wp_users.display_name";

获取没有第二个AND语句的所有用户的列表:

AND wp_users.time >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 MINUTE)) 

我有什么办法可以让两个AND来使它工作吗?

非常感谢提前

1 个答案:

答案 0 :(得分:2)

我没有看到查询错误。我认为错误是数据集的假象。从您对问题的评论中,我了解原始查询:

SELECT wp_users.ID, wp_users.time, wp_users.display_name 
FROM wp_users 
INNER JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id 
WHERE wp_usermeta.meta_key = 'wp_capabilities' 
AND wp_usermeta.meta_value LIKE '%user%' 
AND wp_users.time >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 MINUTE)) 
ORDER BY wp_users.display_name";

不返回任何结果,但删除了内连接和连接条件:

SELECT wp_users.ID, wp_users.time, wp_users.display_name 
FROM wp_users 
WHERE wp_users.time >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 MINUTE)) 
ORDER BY wp_users.display_name";

产生你期待的东西。这意味着:

  1. 有些用户的wp_users.time在目标间隔内,但
  2. 这些用户在wp_usermeta表和
  3. 中没有相应的条目
  4. 还有其他用户拥有相应的条目,但它们与wp_users.time间隔不匹配
  5. 内部联接需要匹配的键条目: http://www.w3schools.com/sql/sql_join_inner.asp

    我认为您的选择是:

    1. 更改数据集,以便100%的用户参与wp_usermeta表
    2. 将内连接转换为左连接或完全外连接,并放宽where约束,例如: SELECT wp_users.ID, wp_users.time, wp_users.display_name FROM wp_users LEFT JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id ON wp_usermeta.meta_key = 'wp_capabilities' AND wp_usermeta.meta_value LIKE '%user%' WHERE wp_users.time >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 MINUTE)) ORDER BY wp_users.display_name;
    3. 这将在技术上使其工作,但您的查询将接受只有相应(非参与)wp_usermeta条目的NULL的用户。