我必须创建一个对mysql数据库的查询,这对我来说太复杂了,无法理解如何创建它。。。我需要选择1年或更长时间内处于非活动状态的所有用户。如果用户在去年添加了至少1条评论、1条请求或1条消息,则该用户处于活动状态。应该是这样的:
从regdate<now()-间隔1年的用户中选择*
还有。。。如果他有任何意见:和comment.commentdate<now()-间隔1年
还有。。。如果他有任何请求:和requests.requestdate<now()-间隔1年
还有。。。如果他有任何消息:和messages.messagedate<now()-间隔1年
但是查询将不会以这种方式工作,因为如果用户没有任何消息,但是有非常旧的请求或注解,查询将不会选择他。我想,我需要在查询中添加if()或case(),但我不知道如何添加。
示例:4个表:用户、注解、消息、请求
应选择:
usera,注册时间:2017年5月10日,无消息,无请求,2条评论,最后一条-2017年5月15日
userc,注册日期:2017年8月15日,几次请求,最后一次-2017年8月16日,几次评论,最后一次-2017年8月17日,一些消息,最后一次-2017年8月18日
不应选择:
userd,注册于2017年4月10日,他有一条2017年11月10日的评论(不超过1年)和一条2017年6月10日的消息(超过1年)
你能帮忙吗?
谢谢。
结果:我试着结合你的答案,例如:
select u.Email, uf.Phone
from User u, UserFields uf
LEFT JOIN Request r ON u.UserID = r.UserID
where u.UserID=uf.UserID
and u.TimeCreated < DATE_SUB(NOW(),INTERVAL 1 YEAR)
and u.UserID NOT IN (select r.UserID from Request as r where u.UserID=r.UserID AND r.TimeCreated >= DATE_SUB(NOW(),INTERVAL 1 YEAR))
LIMIT 0,100
这是真正的查询,我需要合并表user和userfields,我得到一个错误:1054-未知列u.userid在on子句中似乎,“on”子句是正确的。。。但为什么不起作用呢?
最终结果:我将使用以下查询:
select u.Email, uf.FirstName, uf.LastName, uf.Phone, r.TimeCreated as ReqTime
from User u
INNER JOIN UserFields uf ON u.UserID=uf.UserID
LEFT JOIN Request r ON r.UserID=u.UserID
where u.TimeCreated < DATE_SUB(NOW(),INTERVAL 1 YEAR)
GROUP BY u.Email
HAVING
(ReqTime < DATE_SUB(NOW(),INTERVAL 1 YEAR) OR ReqTime is NULL)
LIMIT 0,100
但将在这里添加注解和消息表。我试着只要求它似乎工作得很好。。。
感谢所有帮助过你的人!
3条答案
按热度按时间watbbzwu1#
我们可以使用
not in
标准也是。我尝试了以下查询和示例数据
对于示例数据,请使用以下查询
sgtfey8w2#
我假设表是这样连接的:
用户1---*注解(外键:user\u id)
用户1---*请求(fk:user\u id)
用户1---*消息(fk:user\u id)
编辑:为了避免混淆,我已经完全修改了答案。
无论如何,在执行join+group by方法时,以下查询应该适用于您的情况:
6kkfgxo03#
我想你可以使用以下来获得用户根据你的标准
或者通过加入你可以写成