Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Import danych z CSV do Mysql usuwanie duplikatów
ufo125
post 7.10.2020, 10:31:57
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 7.10.2020

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


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
Go to the top of the page
+Quote Post
SmokAnalog
post 7.10.2020, 10:55:46
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


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.
Go to the top of the page
+Quote Post
ufo125
post 7.10.2020, 11:00:26
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 7.10.2020

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


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
Go to the top of the page
+Quote Post
SmokAnalog
post 7.10.2020, 11:02:58
Post #4





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


No to tak jak mówię, możesz po (lub podczas) odczytaniu pliku CSV robić co chcesz. Nie bardzo rozumiem w czym problem.
Go to the top of the page
+Quote Post
kreatiff
post 7.10.2020, 11:07:06
Post #5





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

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


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.
Go to the top of the page
+Quote Post
ufo125
post 7.10.2020, 11:08:12
Post #6





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 7.10.2020

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


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
Go to the top of the page
+Quote Post
SmokAnalog
post 7.10.2020, 11:18:00
Post #7





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


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.
Go to the top of the page
+Quote Post
ufo125
post 7.10.2020, 12:29:28
Post #8





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 7.10.2020

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


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
Go to the top of the page
+Quote Post
SmokAnalog
post 7.10.2020, 12:50:06
Post #9





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Ale co Ty dokładnie chcesz zrobić? Tylko wrzucać do tabeli bez duplikatów? Wszystko tak jak tam jest, identycznie?
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 Wersja Lo-Fi Aktualny czas: 19.04.2024 - 23:01