Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] insert bez powtórzeń
Forum PHP.pl > Forum > Przedszkole
cerberpat
Witam wszystkich smile.gif moje pytanie brzmi następująco jak wpisać różnicę danych… tzn. mam tabele która ma jakieś 200 000 rekordów i plik który zawiera 95% tych samych rekordów + część nowych i teraz jak je dopisać, aby wpisać tylko te nowe?questionmark.gif Zamiana niestety odpada ponieważ do tabeli tez są wpisywane dane których znowu plik nie posiada… No i musi dopisywać rekordy jeśli od istniejących różnią się choć jednym polem…
Z góry dzięki za pomoc smile.gif
nospor
a duzo pól wchodzi w sklad jednego rekordu?
cerberpat
lacznie z id 52 pola wchodza w skład rekordu... zmianie z regóły ulegaja 2, 3 do 5 choć istnieje prawdopodobieństwo zmiany 90% pól...
nospor
Cytat
lacznie z id 52 pola
ałć.... no to moje pomysły szlag trafił.
michal_robak
musisz po każdym rekordzie z nowego pliku sprawdzac czy juz jest w bazie jezeli nie ma to dopisujesz na końcu.

Inna opcja ... jeżeli wśród tych pól jest jakaś liczba która jest unikalna dla każdego rekordu i np nie może się powtarzać (Wykluczam identyfikator). to robisz tak.
  1. <?php
  2. $lista = array();
  3.  
  4. //dalej
  5.  
  6. //dla każdego rekordu z pierwotnej tabeli:
  7.  
  8. $lista[$numerek] = 1; //gdzie $numerek to ta unikalna liczba dla kazdego rekordu
  9.  
  10.  
  11. //nastepnie dla kazdego nowego rekordu z drugiej tabeli
  12.  
  13. if($lista[$numerek] == 0)
  14. {
  15.    zapisz ze juz nale&#380;y do listy $lista[$numerek] = 1;
  16.    dodaj wartosc do pierwtonej listy
  17. }
  18. ?>


EDIT
Po przeczytaniu że masz 52 pola ... SZOK ... juz nie bede usuwac tego co napisałem
krzysiekk
witam
to moze trzeba dodac pole ktore bedzie informowac o tym ze zawartosc danego rekordu sie zmieniła i wtedy nie analizowac calosci tylko te rekordy ktore uległy zmianie update a te ktore sa nowe to insert
cerberpat
nie było by problemu gdyby nie ilość rekordów...

ale tak sobie mysle bo w sumie jest tam pesel który identyfikuje pacjeta i teraz to np ogranicza ilosc rekordów z tym peselem do np 2, 3... a w dodatku ja potrzebuje wiedzieć czy różni się od ostatniego wpisu o tym peselu wiec "SELECT DISTINCT" może pomóc... Czyli gdy mam rekordy z pliku mogę sprawdzać po peselu selektem i wyciagac dane ostatniego wpisu wtedy porównac i jesli if(różnią się){insert row...} tylko martwi mnie wydajnosc tego przy takiej ilosci rekordów może jakiś pomysł na uleprzenie tego? Porównać musze tylko ostatni rekord tego pacjeta w sumie....
golaod
Po pierwsze PESEL nie jest unikalny, co już od dawna wiadomo. Po drugie wciąż w takim razie nie rozumiem dokładnie, co ma a co niema być kopiowane.

Podaj przykładowe dane( nawet wymyślone ) z jednej i drugiej tabelki i potem napisz symulację wyniku który chcesz osiągnąć.
cerberpat
to są dane pacjeta pesel adres kontakty daty lekaz, pielegniarka i położna ktorych wybral i daty zlozenia deklaracji do kazdego z osobna...

teraz tak ma sprawdzic czy dany pacjet ktory jest w pliku nie zmienil lekarza nazwiska itd... czyli roznice w rekordach... jesli cos zmienil to ma stwozyc nowy rekord stary zostaje jako archiwum...
golaod
No to dla każdego peselu grupuj po lekarzu nazwisku i czym tam chcesz. jak zgrupowanie da > 2 i nie ma innych grupowań z tym samym peselem tzn, że wszystko gra. Lub gdy grupowanie == 1 i są inne grupowania z tym samym peselem to wiadomo, że trzeba się tym zainteresować.
Pilsener
A nie prościej po prostu dodać pole "suma kontrolna"?

Suma kontrolna = md5(pole1 + pole2 + pole3 + pole4 + poleN)

Ten sam hasz oznacza, że na 99,9999% rekordy są identyczne i nie pozwalasz ich dodać, wystarczy:

1. Dodać do bazy takie pole i nadać mu indeks unique
2. Wykonać odpowiednie operacje na wszystkich rekordach
3. Wykonać odpowiednie operacje w pliku z danymi (while + fgets + feof)
4. Dodać plik korzystając z LOAD DATA INFILE, oczywiście zostaną dodane tylko te rekordy, które nie powodują konfliktu w polu "suma kontrolna"

Ja tak robię, bo mam dane gdzie raz klienta identyfikuje po nr tel, innym razem po pesel, innym po regon, nip, nr paszportu, prawo jazdy... życie smile.gif
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.