我一整晚都在尝试让下面的查询工作:
SELECT user.username, user.email, user.id, user.last_mail, us.24hr
FROM wine_users user, wine_subscriptions sub, wine_user_settings us
WHERE user.id = sub.user_id
AND us.id = user.id
AND sub.wine1 = 'yes'
AND user.receive_mail = 'yes'
AND if(24hr = 'yes') user.last_mail >= DATE_SUB (user.last_mail INTERVAL 1 DAY)基本上,我有3个表,包含用户名(wine_users)、订阅(wine_subscriptions)和用户设置(user_settings)
我想要的是选择在我们中选择NO的用户。24小时或在我们中选择YES .24 OR (存储在us.24hr中作为ENUM 'yes‘no),并且在过去24小时内没有收到电子邮件(这是作为user.lastmail中的时间戳存储的)。
任何帮助都能阻止我从左鼻孔撕裂自己的大脑!:)
谢谢:)
塞布
哇!)尝试了所有的建议,但它们都返回了以下错误:
1064 -您的SQL语法有一个错误;请检查与您的MySQL服务器版本对应的手册,以获得使用接近“间隔1天”的正确语法)),限制在第8行。
我猜这与DATE_SUB命令不喜欢user.last_mail字段的时间戳格式有关.这是正确的吗?如果是的话,我该如何处理呢?
为了清晰起见,这个脚本是我为自己做的每一个小时都会被chron触发的页面的一部分&几个朋友。
它检查特易购葡萄酒是否有他们的“神秘葡萄酒包装”(因为网页设计总是更好的廉价葡萄酒!)
如果它可用(每周只发生一次),它会向用户数据库中的任何用户发送电子邮件,如果用户数据库中的24小时设置为no (即在产品可用时每小时给他们发一封电子邮件)或在过去24小时内设置为“是”的24小时内没有收到电子邮件。
(因此,last_mail字段记录最后一封电子邮件发送时的时间戳)
非常感谢你的回应!
( Seb :)
发布于 2011-07-20 21:00:35
看看这招是否管用。
SELECT user.username, user.email, user.id, user.last_mail, us.24hr
FROM wine_users user, wine_subscriptions sub, wine_user_settings us
WHERE user.id = sub.user_id
AND us.id = user.id
AND sub.wine1 = 'yes'
AND user.receive_mail = 'yes'
AND ( (24hr = 'yes' AND user.last_mail >= DATE_SUB (user.last_mail INTERVAL 1 DAY)) OR 24hr='no')发布于 2011-07-20 21:01:10
我从你的问题中假定,必须满足下列两项条件中的一项:
A.在我们中选择NO的用户
B.在我们24小时内选择“是”但在过去24小时内没有收到电子邮件的用户
SELECT user.username, user.email, user.id, user.last_mail, us.24hr
FROM wine_users user, wine_subscriptions sub, wine_user_settings us
WHERE user.id = sub.user_id
AND us.id = user.id
AND sub.wine1 = 'yes'
AND (
user.receive_mail = 'no'
OR (user.24hr = 'yes'
AND DATE_SUB(user.last_mail interval 1 day) > user.last_Mail)
)发布于 2011-07-20 21:02:37
如果我没看错你的问题,你可以找个工会:
SELECT user.username, user.email, user.id, user.last_mail, us.24hr
FROM wine_users user, wine_subscriptions sub, wine_user_settings us
WHERE user.id = sub.user_id
AND us.id = user.id
AND sub.wine1 = 'yes'
AND user.receive_mail = 'yes'
AND if(24hr = 'yes') user.last_mail >= DATE_SUB (user.last_mail INTERVAL 1 DAY)
UNION ALL
SELECT user.username, user.email, user.id, user.last_mail, us.24hr
FROM wine_users user, wine_subscriptions sub, wine_user_settings us
WHERE user.id = sub.user_id
AND us.id = user.id
AND sub.wine1 = 'yes'
AND user.receive_mail = 'yes'
AND 24hr = 'No'https://stackoverflow.com/questions/6768451
复制相似问题