В настоящее время я работаю над импортом .csv, который импортирует элементы повестки дня (например, события) и помещает их в базу данных MySQL. У меня есть суть работы, но есть и неприятный кусок кода, который я, похоже, не могу обернуть вокруг себя тем, как его исправить или сделать его более эффективным/лучшим.Удаление записей DB, которые не находятся в .csv-файле - эффективность?
Часть кода, который является неприятной для меня, когда мероприятие проводится каждые --Позволяет сказать- tuesday
и sunday
от 2012-06-01
«до 2013-04-01
и вы хотите проверить, если некоторые из этих значений Allready в БД (поскольку пользователь может снова импортировать CSV-файл с некоторыми скорректированными значениями). Мой текущий код в конечном итоге реализует правильные значения в БД, но способ, которым это делается, является чем-то вроде хлопот. Если файл снова импортируется, все значения с воскресенья снова удаляются, потому что мой чек сначала проходит через foreach во вторник, где он проверяет соответствие значений DB со значениями, сгенерированными для вторника. После того, как проверки выполнены, и значения вставляются в БД, мой foreach проверяет все значения для воскресенья (tuesday не удаляется, потому что я сохраняю массив со всеми предыдущими вставленными значениями), а затем снова вставляет их. Так что, в основном, когда я импортирую CSV-файл, он удаляет, а затем вставляет те же значения, и мой вопрос: как я могу это предотвратить?
Кроме того, если вы видите какой-либо способ улучшить этот код вообще (потому что я действительно чувствую, что это не эффективно начинать с самого начала), пожалуйста, скажите так, это очень ценится.
Вот код, который проверяет для повторения событий, если вам нужна clarfication или другой код, пожалуйста, дайте мне знать:
//REPEAT DAYS OF THE WEEK
if(!empty($repeatDayOfTheWeek) && $repeatDayOfTheWeek != '')
{
$daysOfTheWeek = explode(',', $repeatDayOfTheWeek);
foreach($daysOfTheWeek as $key => $dayOfTheWeek)
{
if(!is_numeric($dayOfTheWeek))
{
continue;
}
unset($agendaI->agendaItemValues['stopDate']);
$beginDate = strtotime($tempStartDate);
$endDate = strtotime($tempStopDate);
$dayDates = array();
$arrayDatesInDb = array();
if(!isset($previousInserts))
{
$previousInserts = array();
}
if($beginDate != '' && $endDate != '')
{
while($beginDate <= $endDate)
{
if(date('N', $beginDate) == $dayOfTheWeek)
{
$dayDates[] = date('Y-m-d', $beginDate);
}
$beginDate = strtotime("+1 day", $beginDate);
}
$datesInDb = $agendaI->getAgendaItemsByExternId($externId);
if(empty($datesInDb))
{
foreach($dayDates as $dayDate)
{
dump("Empty DB - INSERT: ".$dayDate);
$agendaI->setAgendaItemValue('startDate', $dayDate);
$agendaI->saveAgendaItem();
$previousInserts[] = $dayDate;
}
}
else
{
dump('DB with records');
foreach($datesInDb as $dateInDb)
{
if(!in_array($dateInDb->startDate, $dayDates) && !in_array($dateInDb->startDate, $previousInserts))
{
dump("Not in Item-array, but in DB - DELETE: ".$dateInDb->startDate);
$agendaI->deleteAgendaItem($dateInDb->id);
}
}
foreach($dayDates as $dayDate)
{
foreach($datesInDb as $dateInDb)
{
if($dayDate == $dateInDb->startDate)
{
$arrayDatesInDb[] = $dateInDb->startDate;
dump("In array & in DB - UPDATE: ".$dateInDb->startDate);
$agendaI->setAgendaItemValue('id', $dateInDb->id);
$agendaI->saveAgendaItem();
$previousInserts[] = $dayDate;
}
}
}
unset($agendaI->agendaItemValues['id']);
foreach($dayDates as $dayDate)
{
if(!in_array($dayDate, $arrayDatesInDb))
{
dump("Not in DB-array but in Item-array - INSERT: ".$dayDate);
$agendaI->setAgendaItemValue('startDate', $dayDate);
$agendaI->saveAgendaItem();
$previousInserts[] = $dayDate;
}
}
}
следующие поля в формате CSV:
"Datum" "Tijdstip" "Evenement" "Locatie" "Website" "Toelichting" "Duits" "engels" "startdatum" "stopdatum" "herhalen dag van de week" "externid" "categorie" "via"
Другими словами
Мне нужно проверить, являются ли записи в БД такими же, как в .csv. Если у csv нет записи, которую имеет БД, мне нужно удалить ее из БД (что мой текущий код делает, просто не очень эффективно)
Могу ли я спросить причину падения? – Bono
Какие поля находятся в CSV? – eggyal
@eggyal добавил к вопросу – Bono