2013-11-26 2 views
0

Мой сценарий состоит в том, что у меня есть список событий, и каждое событие имеет несколько дат. Теперь я использую плагин jquery multipledates для загрузки datepicker, где я могу выбрать и отменить выбор нескольких дат. Я могу установить столько дат, сколько хочу, что я уже сделал. Но теперь проблема заключается в том, что я должен отменить выбор определенных дат и установить другие даты (в случае, если события откладываются), каков наилучший способ справиться с этой ситуацией. Мой план: -обновить несколько дат к базе данных

Дело 1 - дата существует в базе данных и была выбрана в datepicker - ничего не делать.

Случай 2 - Дата оленья кожа существует в базе данных и не был выбран в DatePicker - не делать ничего

Case 3 - Дата оленья кожа существует в базе данных и была выбрана в DatePicker - Дата добавления в базу данных.

Дело 4 - Дата существует в базе данных и не выбрана в datepicker - Удалить дату из базы данных.

Но я думаю, что это собирается убить сервер. Может ли кто-нибудь предложить лучший способ добиться этого.

Событие Даты вылета: ID - первичный ключ, event_id - внешний ключ, дата - поле даты, LAST_MODIFIED - DATETIME поле.

Сборщик даты возвращает массив даты. И при отправке формы отправляет этот массив в контроллер, и я использую инструкцию mysql insert для каждого элемента массива. Каждая строка добавляется, если дата не существует в таблице, если она затем обновляет эту строку.

+0

Возможно ли предоставить более подробную информацию о том, как вы сохраняете даты, например. структура таблицы в базе данных - каждая дата сохраняется в новой строке с прикрепленным event_id? И как вы отправляете все выбранные даты на сервер после обновления и сохранения в пользовательском интерфейсе - т.е. как однократное сохранение после завершения или через ajax с каждым датом add/change/remove? – glendaviesnz

+0

обновил вопрос с информацией, которую вы запросили. –

ответ

1

Вместо того, чтобы беспокоиться о логике, чтобы проверить, существуют ли даты или были изменены, другой подход заключается в том, чтобы сначала удалить все даты с текущим event_id, а затем добавить их снова как новые записи, например. сначала

DELETE FROM events_tbl where event_id='$event_id'; 

затем просто вставьте все элементы из массива с одним инструктором INSERT. Из вашей структуры таблицы не видно, что вы получаете что-либо, сохраняя существующие записи, поскольку вы не отслеживаете дату/время, когда они были сначала добавлены, только когда они были в последний раз обновлены - повторное добавление записей, которые не были изменены, возможно меньше накладных расходов, чем проверка необходимости изменения или нет.

EDIT - на основе замечаний с просьбой о подходе, если дате добавления потребности быть нераспределенной

Если вам нужно сохранить поле даты добавил, но по-прежнему хотят иметь минимум обращений к базе данных вы могли бы это сделать только с 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, другие будут иметь исходную дату, добавленную из массива - надеюсь, что это имеет смысл.

Glen

+0

это гораздо приятнее. что происходит через год, говорят, что для определенного события более 300 дат. Разве это не станет головной болью позже? –

+0

Я имею в виду в долгосрочной перспективе, разве это не влияет на производительность. –

+1

Я не уверен, как вы в итоге получите сотни записей для события с таким подходом, когда вы удаляете все записи для данного события каждый раз, когда вы редактируете, поэтому только когда-либо прикреплялись текущие. С такими простыми данными, как это, и если соответствующие столбцы индексируются, Mysql в любом случае справится с сотнями тысяч записей, если только вы не находитесь на сыром нижнем сервере - еще одна вещь, которую вы можете рассмотреть, - это процесс удаления прошлых дат, если они более не актуальны, что также будет приводить в порядок таблицы. – glendaviesnz

Смежные вопросы