我正在尝试一个表格的设计和任命的逻辑,类似谷歌日历提醒。
要求存储多个用户的单一提醒和重复提醒,并在给定时间内查找提醒,以便在日历中查看。
表:-约会
appointment_id,
user_id,
start_date,
end_date, --> End date for the repeat reminder. Null means never ending
start_time,
end_time表:- appointment_frequency
appointment_id,
frequency_type, --> D(Daily),W(Weekly),M(Monthly),Y(Yearly)
interval, --> Every 3 days, Every 2 weeks, Every 4 Months, ...
sunday, --> Weekly interval that happens on Sundays
monday,
tuesday,
wednesday,
thursday,
friday,
saturday, --> Weekly interval that happens on Saturdays
on_day, --> On 5th day of each Month, ...
on_week, --> On 1st week of each Month, On 2nd week of each month
on_last_week, --> On last week of the month
max_repeat. --> Maximum repeat time有什么更好的方法来储存这个吗?
现在,我需要找到这段时间的提醒?例如,在10月1日至15日之间查找用户1和2的提醒。
目前,我正在为一个用户获取所有提醒,然后运行一个java代码来查找这个时间段的提醒。有什么方法可以使用SQL查询吗?
http://sqlfiddle.com/#!9/b540da/5
我想要的输出是,
reminder_id, user_id, name, Date, Start_time, End_time每天的提醒没有结束日期,
当我说,给我提醒b/w 10/15/21和10/12/21,
它必须返回多个条目,因为每天提醒将发生在日历中。
发布于 2021-10-09 15:13:23
您可以在mysql中创建一个PROCEDURE,也可以使用Java (因为这是您在注释中提到的编程语言)循环遍历日期范围,创建一个UNION查询并运行一次。
String sqlstatement = "";
for (LocalDate date = startDate; date.isBefore(endDate); date = date.plusDays(1))
{
sqlstatement += "SELECT a.appointment_id as reminder_id, a.usr_id as user_id, '"+date+"' as date, a.st_time as Start_time, a.end_time as End_time FROM appointment a LEFT JOIN appointment_frquency af ON a.appointment_id = af.appointment_id WHERE '"+date+"' >= a.st_date AND '"+date+"' <= a.end_date UNION";
}
sqlstatement = sqlstatement.substring(0, sqlstatement.lastIndexOf(" UNION"));在for循环之后,您需要从字符串中删除最后一个UNION,然后可以运行查询。
https://stackoverflow.com/questions/69507341
复制相似问题