Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php/mysql/csv] import danych z pliku .csv do bazy mysql
tkopacki
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 16.02.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
kartin
post
Post #2





Grupa: Zarejestrowani
Postów: 246
Pomógł: 79
Dołączył: 25.05.2010

Ostrzeżenie: (0%)
-----


Jak masz teraz to rozwiązane i dlaczego chcesz to zoptymalizować?


--------------------
Jeśli ten post pomógł to kliknij przycisk po lewej stronie.
Nie pomagam przez PW, GG, e-mail, faks, telegram, znaki dymne, ...
Go to the top of the page
+Quote Post
jajcarzd1
post
Post #3





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

Ostrzeżenie: (0%)
-----


Użyj funkcji fgetcsv. Zaimportujesz sobie plik do tablicy. Pobierz sobie wcześniejsze wpisy i porównuj co masz


--------------------
My mind is glowing ...
Jeśli pomogłem push the button :)
Go to the top of the page
+Quote Post
tkopacki
post
Post #4





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 16.02.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
jajcarzd1
post
Post #5





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

Ostrzeżenie: (0%)
-----


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. }


--------------------
My mind is glowing ...
Jeśli pomogłem push the button :)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 14:22