Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/mysql/csv] import danych z pliku .csv do bazy mysql
Forum PHP.pl > Forum > PHP
tkopacki
Witam, mam plik .csv liczący około 6 000 rekordów. W rekordach znajdują się dane produktów. Jak sprawnie importować dane z tego pliku do bazy mysql by produkty mogły być wyświetlane w sklepie www? Dodam że taki import odbywałby się co dzień i wcześniej zaimportowane do bazy rekordy musiałyby się aktualizować wedle danych z nowego pliku.
Proszę przedstawić mi tok postępowania, służący optymalizacji tego procesu.
Pozdrawiam, Tomek.
kartin
Jak masz teraz to rozwiązane i dlaczego chcesz to zoptymalizować?
jajcarzd1
Użyj funkcji fgetcsv. Zaimportujesz sobie plik do tablicy. Pobierz sobie wcześniejsze wpisy i porównuj co masz
tkopacki
Cytat(mariuszli @ 14.06.2010, 18:08:06 ) *
Jak masz teraz to rozwiązane i dlaczego chcesz to zoptymalizować?

  1. $stuff = array();
  2. $row = 1;
  3. if (($fp = fopen("cennik.csv", "r")) !== FALSE) {
  4. while (false !== ($char = fgets($fp))) {
  5. $stuff[] = explode(';',$char);
  6. //tutaj może zapisywać dane w bazie, ale 6000x pod rząd?
  7. }
  8. fclose($fp);
  9. }


Tylko to chyba by było nieoptymalne robić insert 6000 razy z kolei w pętli?
Później jeszcze kwestia sprawdzania tych rekordów i szukania wartości z każdego rekordu z pliku .csv 6000 razy dla każdego rekordu w bazie...
Nie wiem jak to zrobić prościej i szukam optymalnego rozwiązania.
Dziękuję za odpowiedzi.
jajcarzd1
No a jak Ty chcesz wstawić inaczej te 6000 rekordów ? Jeśli trzeba je wstawić to musisz zrobić inserta i tyle. Co do sprawdzania to pobierz jakieś identyfikatory do tablicy po których będziesz sprawdzał czy istnieje on w bazie i zastosuj np. in_array. Jeśli np. identyfikator danego wiersza nie istnieje w tej tablic to robię inserta. Aby było jeszcze szybciej to zamiast in_array wykorzystałbym isset, zrobiłbym tablicę gdzie kluczami były by nazwy tych identyfikatorów a wartości to np. 1

  1.  
  2. $a = array('1' => 1, '2' => 1, '123' => 1);
  3.  


i potem bym sprawdzał poprostu

  1. if(!isset($a['123'])) {
  2. //wstaw
  3. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.