mysql - SQL 查询未获得包含多个 AND 的结果

标签 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 使其正常工作吗?

提前非常感谢

最佳答案

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

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. 还有其他用户确实有相应的条目,但它们与 wp_users.time 间隔不匹配

内部联接需要匹配的键条目: 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 来自 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/

相关文章:

sql - 如何在 PostgreSQL 中创建自定义序列?

MySQL 如果找到则减去,如果没有则显示 null 或零

php 模除以零

mysql - Navicat SQL Consol 在表中,设置记录=本身/10

mysql - 为什么MySQL返回null 1000/0

sql - 加入 2 个 postgres sql 查询

mysql - 将mysql 32位更新为64位

php - 子查询返回多于 1 行 - 如何获取一行的最后更新日期?

MySQL 到 JSON 不一致提取

sql - 什么是正确的 SQL 语句来实现以下结果