Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Usuwanie zduplikowanych wpisow
Agape
post
Post #1





Grupa: Zarejestrowani
Postów: 384
Pomógł: 13
Dołączył: 16.06.2006

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


Mam w tabeli produkty z ich nazwami, do wgrywanych produktow robie dodatkowa kolumne `nazwa_unikalna` gdzie zapisuje tytul obciety do max 50 znakow. Nastepnie mam cos takiego w uproszczeniu:
  1. $produkty_unikalne = array();
  2. foreach ($produkty as $produkty_){
  3. if(in_array($produkty_['nazwa_unikalna'], $produkty_unikalne)){
  4. //jezeli produkt o takiej nazwie juz wystepowal, usuwaj powielony
  5. }else{
  6. //zbieraj unikalne do porownania
  7. $produkty_unikalne[] = $produkty_['nazwa_unikalna'];
  8. }
  9. }

czyli jezeli napotka drugi i kolejny produkt ktory ma taka sama nazwe unikalna, to usuwa go zeby nie bylo takich samych poduktow w bazie. Problem w tym ze baza ma pareset tysiecy rekordow i funkcja ta wykonuje sie pare minut, czym wiecej produktow przerobi tym bardziej zwalnia. Potrzebuje ja zastapic poleceniem sql, zeby zostawialo pierwszy produkt z taka nazwa a usuwalo nastepne, niestety nie mam pojecia jak to zrobic :/

7 minut dokladnie wykonuje sie to zapytanie, jakbym zszedl do 2 byloby idealnie ...

Ten post edytował Agape 25.08.2016, 15:02:39
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Agape
post
Post #2





Grupa: Zarejestrowani
Postów: 384
Pomógł: 13
Dołączył: 16.06.2006

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


Wlasnie nie chodzi o to ze dlugo sie usuwa, tylko dlugo mieli. Pobieram cala baze (ale tylko id, nazwe i nazwa_unikalna) jednym zapytaniem i czas ktory napisalem jest dla bazy w ktorej nie ma duplikatow, samo sprawdzanie calej bazy tyle zajmuje, mielenie tablicy, nie wiem czy in_array tak dlugo zajmuje czy co ... wiec w php jest jakis problem :/

mysle ze czym wiecej ma wartosci w tablicy, tym dluzej musi je porownywac i dla tego tym tym bardziej zwalnia z czasem wykonywania :/

zrobilem kolumne `id` auto increment i zapytanie:
  1. DELETE b1 FROM `baza` b1, `baza` b2 WHERE b1.nazwa_unikalna = b2.nazwa_unikalna AND b1.id > b2.id;

i po 11 min zabilem proces, w phpmyadmin nawet sie nie dalo wejsc :/
moze dodac index do tej kolumny ? moze cos innego niz in_array ? mecze sie z tym dlugi czas i nie moge dojsc jak to przyspieszyc :/



Ten post edytował Agape 25.08.2016, 15:36:05
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 7.10.2025 - 18:58