【发布时间】:2010-11-05 09:54:31
【问题描述】:
我有以下问题:
这是我的创建表:
CREATE TABLE `mod_users` (
`u_id` int(11) NOT NULL auto_increment,
`u_date` datetime NOT NULL,
`u_type` int(1) NOT NULL default '',
`u_adddate` datetime NOT NULL,
PRIMARY KEY (`u_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
u_type 包含一个表示区间类型的 int (doh)。
1 = one week
2 = two weeks
3 = one month
4 = one year
我想选择当前日期之后的第一个日期,它属于 u_type 的间隔 - 一天(所以一周变成 6 天,2 周变成 13 天,一个月变成:1 个月 - 1 天,一个year 变为:一年 -1 天),以 u_date 开始。听起来很混乱。
一个例子:
如果用户具有类型 1(一周)和 u_date 2010-11-01 00:00:00(四天前),我想在一周后获得第一次出现。在这种情况下'SELECT DATE_ADD(u_date,INTERVAL 6 DAYS) from mod_users WHERE u_id = 1';(给出 2010-11-07 00:00:00)我如何为 u_type 3 或 4 执行此操作?像'SELECT DATE_ADD(u_date,INTERVAL 1 MONTH - 1 DAYS) from mod_users WHERE u_id = 1';??这不是一个有效的查询。
另外,如果当前日期是 2010-11-08,我希望在此日期之后获得第一次出现。在这种情况下,2010 年 11 月 14 日。 00:00:00。这将拒绝此查询'SELECT DATE_ADD(u_date,INTERVAL 6 DAYS) from mod_users WHERE u_id = 1'; 因为 6 天不是此查询的正确间隔。
希望你们中的一些人能提供帮助?我可以使用 php 和 mysql,所以这些查询仅用作示例。我真的被困在这里,所以只是提示或线索将不胜感激。
【问题讨论】:
-
同时我已经用 SELECT u_date - INTERVAL 1 DAY + INTERVAL 1 MONTH AS C from mod_users WHERE u_id = 1 解决了第一个问题