0

我有一个查询,从一个表中选择用户的注册日期。

SELECT DATE(registered)
FROM users
WHERE user_id= ".$currentUser."
ORDER BY registered ASC
LIMIT 1

我需要通过加入另一个表来修改原始查询,以确保用户不存在于第二个表(“访问”)中,其中成员 ID 低于某个值并且访问日期低于某个日期。

LEFT JOIN access ON (users.user_id = access.user_id)
WHERE access.user_id < 500
AND access.date ... after March 1, 2012

不知道如何把这两个放在一起。

4

2 回答 2

2

您需要将整个条件放在联接中,否则您将有效地将其变成内部联接:

...
LEFT JOIN access ON (
  users.user_id = access.user_id
  AND access.user_id < 500
  AND access.date >= '20120301'
)
WHERE access.user_id is null
...
于 2012-03-04T04:59:44.163 回答
2

您可以使用相关子查询,例如:

  SELECT DATE(u.registered)
    FROM users u
   WHERE u.user_id = ".$currentUser."

     AND NOT EXISTS (
             SELECT 1 
               FROM access a 
              WHERE u.user_id = a.user_id
                AND a.user_id < 500
                AND a.date > DATE '2012-03-01')

ORDER BY registered ASC 
LIMIT 1;

一些注意事项:
即使access表中没有匹配的行,您仍然可以获得一行。
您可能知道这...ASC是默认排序顺序,因此您无需输入。

于 2012-03-04T05:00:23.103 回答