我正在尝试使用c#构建一个提醒应用程序,我想在我的应用程序中强调重复的概念 [不重复,每天,每周...] ,但我的问题是面对的是我将如何将此提醒存储在数据库中。
我尝试复制提醒并更改日期,但是如果它没有结束日期那么这个似乎不是一个非常聪明的想法。然后我试图在数据库中保留一条记录,如果日期已经过去,以防它重复它将日期修改为下一条,但在这里我面临着如何在特定日期搜索提醒的问题。我想知道SQL是否可以临时为搜索复制两个日期之间的记录。
所以我现在几乎没有想法,有什么帮助吗?!
答案 0 :(得分:0)
我认为您不应该在提醒记录中动态更改任何数据。你应该添加一个名为" remDayOfWeek"的变量。到数据库 - 如果要每周提醒用户,这将是用户开始的一周中的某一天。我们假设您每天扫描一次需要提醒的用户。具有每日提醒功能的所有用户都需要提醒。对于每周提醒的用户,所有使用" remDayOfWeek"等于当周的当天会得到提醒。
答案 1 :(得分:0)
好的我建议,是这样的: 不要为每天需要提醒的人创建个人提醒。为数据库提供提醒,开始/结束日期以及检查的周期(每日,每周,每月)和另一列,以跟踪用户上次查看提醒的时间。 类似的东西:
column: | ID | title | Desc | Start | End | Period | lastCheck |
---------------------------------------------------------------------------------------
type: | INT | varchar(100) | varchar(300)| Date | Date| INT (or Enum)| Date
整个想法是,如果用户跳过一天你不需要提醒他们两次,并且你并不真正关心过期提醒发生的事情,只是最新的。
假设如下:
no-repeat = 0
daily = 1
weekly = 2
monthly = 3
您可以使用以下方法提取特定日期所需的所有提醒:(假设SQL Server,您没有指定)
SELECT * FROM Reminder
WHERE (GetDate() BETWEEN Start AND End)
AND ((Period = 0 AND lastChecked IS NULL)
OR (Period = 1 AND GetDate() > DATEADD(day,1,lastChecked))
OR (Period = 2 AND GetDate() > DATEADD(week,1,lastChecked))
OR (Period = 3 AND GetDate() > DATEADD(month,1,lastChecked)));
如果您希望提醒为24小时/ 1周/ 1个月,则与上次检查完全相符。否则使用CONVERT (date, GETDATE())
忽略用户检查的时间。
最后,在用户解除提醒后,将lastChecked
更新为当前时间。