首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL条件选择

MySQL条件选择
EN

Stack Overflow用户
提问于 2011-07-20 20:56:17
回答 6查看 957关注 0票数 1

我一整晚都在尝试让下面的查询工作:

代码语言:javascript
复制
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 :)

EN

回答 6

Stack Overflow用户

发布于 2011-07-20 21:00:35

看看这招是否管用。

代码语言:javascript
复制
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')
票数 0
EN

Stack Overflow用户

发布于 2011-07-20 21:01:10

我从你的问题中假定,必须满足下列两项条件中的一项:

A.在我们中选择NO的用户

B.在我们24小时内选择“是”但在过去24小时内没有收到电子邮件的用户

代码语言:javascript
复制
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)
    )
票数 0
EN

Stack Overflow用户

发布于 2011-07-20 21:02:37

如果我没看错你的问题,你可以找个工会:

代码语言:javascript
复制
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'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6768451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档