【问题标题】:multiple event dates update to database [closed]多个事件日期更新到数据库[关闭]
【发布时间】:2013-12-11 00:30:52
【问题描述】:

我的情况是我有一个事件列表,每个事件都有多个日期。现在我正在使用 jquery multipledates 插件来加载 datepicker,我可以在其中选择和取消选择多个日期。我可以设置尽可能多的日期,我已经完成了。但是现在的问题是,当我必须取消选择某些日期并设置其他日期(以防事件推迟)时,处理这种情况的最佳方法是什么。 我的计划:-

案例 1 - 日期存在于数据库中并且已在 datepicker 中选择 - 什么都不做。

案例 2 - 数据库中不存在日期,并且尚未在 datepicker 中选择 - 什么也不做

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

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

但我认为这会杀死服务器。任何人都可以提出更好的方法来完成这项工作。

活动日期表: id - 主键, event_id - 外键, 日期 - 日期字段, last_modified - DATETIME 字段。

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

【问题讨论】:

  • 您能否提供更多关于如何保存日期的详细信息,例如。数据库中的表结构 - 每个日期是否保存在带有 event_id 的新行中?更新并保存在 UI 中后,您如何将所有选定的日期发送回服务器 - 即。完成后作为单个保存,或通过每个日期添加/更改/删除的 ajax ?
  • 用您要求的信息更新了问题。

标签: php jquery mysql database datepicker


【解决方案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_add 的当前日期,其他将具有从数组中添加的原始日期 - 希望这是有道理的。

格伦

【讨论】:

  • 那是更好的方法。一年后发生的事情说特定事件有300多个日期。以后不就头疼了吗?
  • 我的意思是从长远来看,这不会影响性能。
  • 我不确定使用这种方法最终会如何获得数百个事件条目,因为您每次编辑时都会删除给定事件的所有条目,因此只附加当前条目.使用像这样的简单数据,如果相关列被索引,Mysql 无论如何都会处理数十万个条目,除非你在一个肮脏的低端服务器上 - 你可能要考虑的另一件事是删除过去日期的过程,如果他们不再相关,这将使表格保持整洁。
  • 非常感谢您的提示。 :)
  • 查看我的编辑以获取保留 date_added 同时仍减少数据库调用的选项。
猜你喜欢
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多