Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Usuwanie zduplikowanych rekordó z bazy
Forum PHP.pl > Forum > Przedszkole
-Mati-
Mam jeszcze taki problem, zdarza się, że w bazie jest kilka rekordów, które mają taki sam 'link'.
Chciałbym, aby pozostał tylko 1 rekord z takim linkiem a wszystkie inne zostały usunięte, więc napisałem taki skrypcik:

  1. $sql = "select link, count(*) from pliki group by tytul";
  2. $ans = mysql_query($sql);
  3. $deleted = 0;
  4. while (list($tytul, $cnt) = mysql_fetch_array($ans)) {
  5. if ($deleted > 10000) exit;
  6. if ($cnt > 1) {
  7. $cnt2 = $cnt - 1;
  8. $deleted ++;
  9. $sql2 = "delete from pliki where link = '$tytul' limit $cnt2";
  10. mysql_query($sql2);
  11. }
  12. }
  13. echo $deleted;


Zanim go odpalę chciałbym zapytać was o opinię, czy to zadziała (usunie duplikaty i zostawi tylko 1 rekord) i nic mi nie zepsuje w bazie ?
Rid
Trochę brak temu logiki.
$deleted = 0;

a potem sprawdza pan warunek czy $deleted>10000 -to Panu nigdy nie pójdzie bo $deleted to przecież 0
Hpsi
Cytat
a potem sprawdza pan warunek czy $deleted>10000 -to Panu nigdy nie pójdzie bo $deleted to przecież 0
przyjżyj się potem jest i inkrementacja w pętli...
Ja bym zrobił to troszkę inaczej, zczytywał każdy rekord unikalnie (DISTINCT) następnie kasował wszystkie te które mają ten sam tytuł i inne id, chyba by troszkę prościej było smile.gif
Gość
$deleted na początku przyjmuje wartość 0 a gdy dojdzie do 10000 (skasowanych rekordów) skrypt przerywa działanie.
-Mati-
Hpsi+ a czy sądzisz, że Twój sposób usunie mi więcej rekordów, czy po prostu usunie to samo tylko w inny sposób ?
Bo jeśli zrobi to samo, to pozostanę przy tym co mam, bo w php dopiero raczkuje i ciężko będzie mi to przebudować tak jak mówisz.
Rid
Moja gapa ,a raczej ślepota.Powinno działać dobrze:)
Hpsi
@mati . Defakto zrobi to samo, ale roboty dla Ciebie o wiele mniej przyklad (chyba działający piszę z palca), choć teraz zacznam się zastanwiać czy nie wprowadziłem Cie w błąd bo nie wiem czy masz klucz id w tej tabeli.
-Mati-
Mam klucz id, możesz pokazać ten przykład ?
Hpsi
Wybacz moja szybka odpowiedz ale trzeba podziekować pkp ze 2h mi się pociag spoznil ;d

  1. $zapytanie = mysql_query('SELECT DISTINCT(`tytul`) AS `key`, `id` FROM `pliki`');
  2. while($r = mysql_fetch_array($zapytanie))
  3. {
  4. mysql_query('DELETE FROM `pliki` WHERE `tytul`="'.$r['key'].'" AND `id`!='.$r['id'];
  5. }
melkorm
Można to zrobić jednym zapytanie przy pomocy COUNT, GROUP BY i HAVING wink.gif

Było już parę razy na forum wink.gif
Hpsi
@melkorm, co fakt to fakt, ale nie czuje do końca zapytan z having dlatego zapronowałem takie rozawiązanie smile.gif wiec jesli masz rozwiązanie jak to zrobić w jednym zapytaniu byłoby miło gdybyś podał z wytlumaczniem, może w końcu ja też bym to zrozumiał tongue.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.