我有一个存储事件日记的数据库(非常类似于facebook的工作方式),这些数据可以针对特定的单一日期,或每年重复发生。例如,我可能会在2013年6月1日举行婚礼,并在每年5月4日举行生日。我试图提取下一年发生的所有事件的清单,按时间顺序排列。
id u_id title event_day event_month event_year
1 1 Wedding 22 02 2013
2 1 Jan Birthday 1 1
3 1 May Birthday 04 5
使用此查询,我可以填写当前年份,但如果事件已经发生(例如上面数据中的'jan birthday',则需要是当前年份加上一个添加:
SELECT title, IF(event_year = '', YEAR(CURDATE()), event_year) AS ev_year,
event_day, event_month
FROM `events`
返回:
title ev_year event_day event_month
Wedding 2013 22 02
Jan Birthday 2014 1 1
May Birthday 2014 04 5
由于
答案 0 :(得分:1)
我建议将其存储在单个日期时间列中,只标记重复发生的事件 - 您仍然可以对它们进行计算。作为一个好处,你甚至可以知道peoaple的年龄:)
但是用你当前的表格:
SELECT title, IF(event_year = '',
IF(event_day < DAY(CURDATE()) AND event_month = MONTH(CURDATE()) OR event_month <
MONTH(CURDATE()), YEAR(CURDATE())+1, YEAR(CURDATE())), event_year) AS ev_year,
event_day, event_month
FROM `events`
答案 1 :(得分:1)
title event_date
Wedding 2013-22-02
Jan Birthday 2014-01-01
May Birthday 2014-04-05
Als Birthday ?-11-15 //(We know birthdays happen yearly so we can calculate back on this in SQL)
Jane Doe Wedding ?-1-2 //(We might not know the year yet. So we can handle this in 2 ways. Dont enter the event into your planner until the couple tells you the date (or mails you the date), OR you can treat the date the same as a birthday so you get alerted this year)
好的,你要做的就是做日期比较;让mysql用以下的方式处理这个逻辑:
SELECT id FROM events WHERE CURDATE()&gt;活动日期; //这会让你全部 过期事件
现在您可以通过执行日期间隔来更新年份,例如:
UPDATE事件SET event_date = DATE_ADD(event_date,INTERVAL 1年) WHERE id IN(#numbers_from_above_query#); //这将为你增加一年 日期字段
现在,当你不知道日期时,你可以做到
DATE_SUB(CURDATE(),INTERVAL 1年)//这将减去 这一年让你落后一年。你可以用这个来 填充您的数据。通过这种方式,第一个查询应该捕获a 生日已经过去了。