MySQL - 找不到活跃用户

时间:2014-01-24 21:36:09

标签: mysql

也许听起来很简单,但问题是。

我有用户可以在每次散步时添加步骤。每次他们记录步骤时,它都会向表中添加一个新条目。条目表模式是:
id,user_id,steps,date_created
我们的想法是让那些已经开始添加步骤的用户因某些原因在某些日子里没有活动 这个过程看起来像(每天):
第1天:用户添加步骤(早上)
       用户添加步骤(晚上)
第2天:用户不添加任何内容 第3天:用户添加步骤
第4天:用户不添加任何内容 。 。 。
第11天:用户不添加任何内容         系统将触发该用户的提醒 第12天:用户不添加任何内容         系统不会触发提醒,因为它只应发送一次

我的问题是,我是否可以在一个查询中实现此目的,并且没有已发送电子邮件的标志?

我的想法是从条目表中提取user_id并检查它们是否在过去7天内添加了任何内容,但是如何摆脱那些在7天以上没有活动的人。

拉动所有用户:

SELECT 
  DISTINCT(user_id) 
FROM 
  entries

在过去7天内吸引活跃用户:

SELECT 
  DISTINCT(user_id) 
FROM    
  entries 
WHERE 
  date_created BETWEEN '2014-01-17' AND NOW() 
ORDER BY 
  date_created DESC

任何建议都表示赞赏(可能是我的头脑中很长时间而且我过度复杂了)。

感谢。

1 个答案:

答案 0 :(得分:1)

此查询应该这样做。很方便保持你的“诡计”。

SELECT u.user_name,
  FROM users AS u
LEFT OUTER
  JOIN entries AS e
    ON e.user_id = u.user_id
   AND e.date_created >= CURRENT_DATE - INTERVAL 7 DAY
 WHERE e.user_id IS NULL

在查询中,左连接会获得想要查找的匹配项。因此,您感兴趣的条件(日期范围)进入ON子句。 WHERE子句限制为不匹配的行(在这种情况下,所有不匹配的行将从连接返回null。

一些参考文献: When to use a left outer join?