我有一个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来使它工作吗?
非常感谢提前
答案 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";
产生你期待的东西。这意味着:
内部联接需要匹配的键条目: http://www.w3schools.com/sql/sql_join_inner.asp
我认为您的选择是:
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;
这将在技术上使其工作,但您的查询将接受只有相应(非参与)wp_usermeta条目的NULL的用户。