也许听起来很简单,但问题是。
我有用户每次散步时都可以添加步骤。每次记录步骤时,都会在表中添加新的条目。条目表模式为:
id,user_id,stems,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
任何建议都赞赏的(也许在我的脑海中呆了很长,我已经使它变得复杂了)。
谢谢。
此查询应该这样做。方便地放在您的"技巧袋"中。
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
在查询中,左连接获得了您的匹配您 not 想要查找。因此,您感兴趣的条件(日期范围)进入了ON子句。Where子句限制了无与伦比的行(在这种情况下,所有无与伦比的行都将从JOIN返回NULL。
一些参考:何时使用左外连接?