我的情况是我有一个事件列表,每个事件都有多个日期。现在我使用jquery倍数插件加载datepicker,我可以选择和取消选择多个日期。我可以根据自己的需要设置尽可能多的日期。但现在问题是当我必须取消选择某些日期并设置其他日期时(如果事件被推迟),最好的方法是处理这种情况。 我的计划: -
案例1 - 日期存在于数据库中并且已在datepicker中选择 - 什么都不做。
案例2 - 日期在数据库中不存在,并且未在datepicker中选择 - 什么都不做
案例3 - 数据库中不存在日期,并且已在datepicker中选择日期 - 将日期添加到数据库。
案例4 - 日期存在于数据库中且尚未在datepicker中选择 - 从数据库中删除日期。
但我认为这会杀死服务器。任何人都可以提出更好的方法来完成这项工作。
活动日期表: id - 主键, event_id - 外键, 日期 - 日期字段, last_modified - DATETIME字段。
日期选择器返回日期数组。并在提交时,表单将此数组发送到控制器,并且我正在为每个数组项使用mysql insert语句。如果表中没有日期,则添加每一行,如果是,则更新该行。
答案 0 :(得分:1)
不是担心检查日期是否存在或已被更改的逻辑,另一种方法是首先使用当前event_id删除所有日期,然后再将它们全部添加为新条目,例如。首先
DELETE FROM events_tbl where event_id='$event_id';
然后只使用一个INSERT语句插入数组中的所有项。从您的表结构中看不出您通过保留现有条目获得任何内容,因为您没有跟踪它们首次添加的日期/时间,只有在它们上次更新时才重新添加 - 可能重新添加未更改的条目比检查是否需要更改更少的开销。
编辑 - 基于评论,如果需要保留添加日期,请求方法
如果您确实需要保留添加日期的字段,但仍希望对数据库进行最少的调用,则只需3次调用即可:
SELECT * from events_tbl WHERE event_id='$event_id';
然后将所有事件放在一个关联数组中,并将事件日期作为键,并将日期添加为值。一旦你有这个数组,那么:
DELETE FROM events_tbl where event_id='$event_id';
然后通过一系列新事件,您可以执行以下操作:
foreach($new_dates as $date) {
if (array_key_exists($date, $old_dates)) {
$date_added = $old_dates[$date];
} else {
$date_added = $today;
}
}
但显然在上面的循环中,您将构建单个INSERT语句的部分,其中一些将具有date_added的当前日期,其他部分将具有从数组添加的原始日期 - 希望这是有道理的。
格伦