我有一个 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 使其正常工作吗?
提前非常感谢
最佳答案
我没有看到查询错误。我认为该错误是您的数据集的人为因素。从对您问题的评论中,我了解到原始查询:
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";
产生您所期望的结果。这意味着:
- 有些用户的 wp_users.time 在目标间隔内,但是
- 这些用户在 wp_usermeta 表中没有相应的条目,并且
- 还有其他用户确实有相应的条目,但它们与 wp_users.time 间隔不匹配
内部联接需要匹配的键条目: http://www.w3schools.com/sql/sql_join_inner.asp
我认为你的选择是:
- 更改数据集,以便 100% 的用户参与 wp_usermeta 表
- 将内连接转换为左连接或完全外连接并放宽 where 约束,例如:
SELECT wp_users.ID、wp_users.time、wp_users.display_name 来自 wp_users 左连接 wp_usermeta ON wp_users.ID = wp_usermeta.user_id ON wp_usermeta.meta_key = 'wp_capability' AND wp_usermeta.meta_value LIKE '%user%' WHERE wp_users.time >= UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 分钟)) 按 wp_users.display_name 排序;
从技术上讲,这将使其工作,但您的查询将接受对应(非参与)wp_usermeta 条目仅具有 NULL 的用户。
关于mysql - SQL 查询未获得包含多个 AND 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32582893/