Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Import danych z CSV do Mysql usuwanie duplikatów
Forum PHP.pl > Forum > Przedszkole
ufo125
Siema
Postaram się opisać problem w kwestii php jestem laikiem. Mam do zaimportowania Dane z pliku exel do których codziennie jest cos dodawane. Za pomocą phpmyadmin mogę sobie bez problemu zaimportować ten dane po przekonwertowaniu exela do CSV pytanie czy istnieje jakiś skrypt w php który będzie usuwał duplikaty albo nie będzie dodawała danych które już istnieją w tabeli bazy danych opierając się np. o PESEL
SmokAnalog
PHP ma wbudowaną obsługę formatu CSV. Nie jest jakoś super intuicyjna, ale jest. Wygooglaj: "php csv".

Zakładając, że jesteś "skazany" na pliki Excela, najwygodniejszym rozwiązaniem byłoby dla Ciebie dać formularz z uploadem tych plików. Po załadowaniu, skrypt przetwarzałby sobie ten plik i robił co dusza zapragnie.

Wygodniejszą alternatywą byłoby korzystanie z Google Docs, które ma swoje API. Mógłbyś taki dokument czytać skryptem np. co kilka minut automatycznie i robić co potrzeba bez żadnego wysyłania pliku.
ufo125
kilka już znalazłem ale jak pisałem nie ogarniam do końca nie chce zakładać przez php nowej tabeli tylko żeby aktualizowało obecna w przypadku dubla nie dodawało
SmokAnalog
No to tak jak mówię, możesz po (lub podczas) odczytaniu pliku CSV robić co chcesz. Nie bardzo rozumiem w czym problem.
kreatiff
Najprościej bez skryptów to będzie chyba dodanie UNIQUE dla pola PESEL w bazie danych i ustawienie w opcjach PHPMyAdmin by ignorował importowanie danego rekordu gdy napotka zduplikowany indeks.
Ale, jeśli tylko przy tym ręcznym dodawaniu ma ingorować duplikaty, a one same mogą istnieć w bazie, to ta opcja odpada.
ufo125
Cytat(SmokAnalog @ 7.10.2020, 12:02:58 ) *
No to tak jak mówię, możesz po (lub podczas) odczytaniu pliku CSV robić co chcesz. Nie bardzo rozumiem w czym problem.

Mówimy teraz na plikach exel czy zeby php ogarniał csv?? Się zgubiłem smile.gif
SmokAnalog
Działa to tak, że czytasz sobie ten plik Excela w skrypcie PHP i ten plik jest interpretowany jako zwykła tablica. Na przykład niech plik Excel ma takie dane:

Kod
imie,nazwisko,wiek
Jan,Kowalski,33
Anna,Nowak,21
Henryk,Król,88


Skrypt PHP otwiera plik, który mu przesłałeś i albo każesz mu czytać wiersz po wierszu (oszczędzając pamięć) i masz wtedy przy każdej iteracji osobną tablicę:

1. ['imie', 'nazwisko', 'wiek']
2. ['Jan', 'Kowalski', '33']
3. ['Anna', 'Nowak', '21']
4. ['Henryk', 'Król', '88']

Albo czytasz od razu cały plik i masz wszystkie dane naraz:

  1. [
  2. ['imie', 'nazwisko', 'wiek'],
  3. ['Jan', 'Kowalski', '33'],
  4. ['Anna', 'Nowak', '21'],
  5. ['Henryk', 'Król', '88']
  6. ]


Co robisz z tymi danymi to już Twoja decyzja. Możesz narysować na ekranie kwiatki z liczbą listków równych długości imienia, na przykład.

Albo możesz zrobić to co Ty chcesz, czyli wstawiać rekordy do bazy, sprawdzając przy tym czy dany rekord już istnieje.

Jest też wbudowany sposób wrzucania CSV do bazy SQL: LOAD DATA INFILE. Jest dużo szybszy, ale masz mniej kontroli nad tym co się dzieje.
ufo125
Olewamy temat
Znalazłem takie coś na forum

  1. CREATE TEMPORARY TABLE tmp SELECT DISTINCT * FROM nazwa-naszej-bazy;
  2. TRUNCATE TABLE nazwa-naszej-bazy;
  3. INSERT INTO nazwa-naszej-bazy SELECT * FROM tmp;
  4. DROP TABLE tmp;


Niestety po wykonaniu daje 0 nie wiem czy mam jeszcze cos dodać oprócz nazw tabeli
SmokAnalog
Ale co Ty dokładnie chcesz zrobić? Tylko wrzucać do tabeli bez duplikatów? Wszystko tak jak tam jest, identycznie?
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.