Php 多个事件日期更新到数据库

Php 多个事件日期更新到数据库,php,jquery,mysql,database,datepicker,Php,Jquery,Mysql,Database,Datepicker,我的场景是,我有一个事件列表,每个事件都有多个日期。现在我正在使用jquery multipledates插件加载datepicker,在这里我可以选择和取消选择多个日期。我可以设置任意多的日期,我已经做了。但现在的问题是,当我不得不取消选择某些日期并设置其他日期(以防事件延期)时,处理这种情况的最佳方法是什么。 我的计划:- 案例1-数据库中存在日期,并且已在datepicker-不执行任何操作中选择 案例2-数据库中不存在日期,并且未在datepicker中选择日期-不执行任何操作 案例3-

我的场景是,我有一个事件列表,每个事件都有多个日期。现在我正在使用jquery multipledates插件加载datepicker,在这里我可以选择和取消选择多个日期。我可以设置任意多的日期,我已经做了。但现在的问题是,当我不得不取消选择某些日期并设置其他日期(以防事件延期)时,处理这种情况的最佳方法是什么。 我的计划:-

案例1-数据库中存在日期,并且已在datepicker-不执行任何操作中选择

案例2-数据库中不存在日期,并且未在datepicker中选择日期-不执行任何操作

案例3-日期在数据库中不存在,并且已在datepicker-将日期添加到数据库中选择

案例4-数据库中存在日期,但尚未在datepicker中选择该日期-从数据库中删除该日期

但我认为这会杀死服务器。有谁能提出更好的方法来完成这件事吗

活动日期表: id-主键, 事件id-外键, 日期-日期字段, last_modified-日期时间字段


日期选择器返回一个日期数组。在提交时,表单将这个数组发送给控制器,我对每个数组项使用mysql insert语句。如果表中不存在日期,则会添加每一行,如果不存在,则会更新该行。

与其担心检查日期是否存在或是否已更改的逻辑,另一种方法是首先删除所有具有当前事件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_的当前日期,其他语句将从数组中添加原始日期,希望这是有意义的


Glen

您是否能够提供有关如何保存日期的更多详细信息,例如数据库中的表结构-是否将每个日期保存在新行中,并附上事件id?在UI-ie中更新和保存之后,如何将所有选定的日期发送回服务器?完成后作为单个保存,或通过ajax添加/更改/删除每个日期?使用您要求的信息更新问题。这是一种更好的方法。一年后发生的事情表明某一特定事件有300多个日期。这以后会不会成为一个头痛的问题?我的意思是,从长远来看,这不会影响性能。我不确定,如果每次编辑时都删除给定事件的所有条目,那么使用这种方法,您最终会为一个事件创建数百个条目,因此只能附加当前条目。用这样的简单数据,如果相关列被索引,不管怎样,MySQL将处理成百上千个条目,除非你在一个粗鄙的低端服务器上——另一件你可能要考虑的是删除过去的日期,如果它们不再相关,那么这将使表保持整洁。请参阅“我的编辑”以获取在减少数据库调用的同时保留已添加日期的选项。