Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL]Usuwanie dublowanych email z MySQL.
Giluś
post
Post #1





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

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


Cześć, mam bazę MySQL gdzie jest ~2k użytkowników i chciałbym teraz sprawdzić czy któreś się powtarzają np.:

ID|Email|name|hash
1|ddd@o2.pl|ddd|dddd
2|ddd@o2.pl|cos|cos2
3|ddd2@o2.pl|cos|cos2
4|ddd@o2.pl|cos|cos2
.....
400|cos2@gmail.pl|222|553
753|cos2@gmail.pl|111|333


I teraz widzimy, że ID o numerze 1, 2, 4 oraz 400 i 753 się powtórzyły (takie sam email) jak teraz wykonać aby przeskanować wszystkie wyniki z mysql i te które się powtórzyły usunąć, te powtórzenia nie muszą być tak blisko siebie, mogą być o ID=1 a drugi o ID=224..


Na ogół stworzenie pętli oraz usuwanie wyników z mysql potrafię, ale nie wiem jak zrobić to z tym czy jakieś wyniki się powtórzyły..


Pozdrawiam i z góry bardzo dziękuje.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Trochę bez sensu, że e-mail nie jest unikalny. Zapytanie:
  1. SELECT `Email`, GROUP_CONCAT(`ID` SEPARATOR ',') `ids` FROM `tabela` GROUP BY `Email` HAVING COUNT(`ID`) > 1

wybierze Ci adresy e-mail, które się powtarzają oraz wszystkie identyfikatory dla tych adresów oddzielone przecinkiem. Pozostaje jedynie pytanie, które wiersze z tych wybranych mają być usunięte.

EDIT:
Mała zmiana.

Ten post edytował mortus 19.01.2013, 11:18:43
Go to the top of the page
+Quote Post
adek-
post
Post #3





Grupa: Zarejestrowani
Postów: 124
Pomógł: 2
Dołączył: 19.04.2007
Skąd: Częstochowa

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


Spróbuj tego wrzucając poprzez zapytanie SQL w phpMyAdminie - oczywiście zrób kopię bazy w razie czego, aczkolwiek wpis działa na 100%

będzie sprawdzał zduplikowane rekordy Email i zostawi ten który jest o najmniejszym ID, oczywiście jeśli chcesz po czymś innym sprawdzać to też nie ma problemu.
  1. DELETE n1 FROM twojaNazwaBazy n1, twojaNazwaBazy n2 WHERE n1.ID > n2.ID AND n1.Email= n2.Email


ewentualnie jeśli chcesz aby sprawdzał dwa warunki, czyli gdy będzie użytkownik o tym samym name i Email taki w obu rekordach to dodaj tylko jeszcze jeden AND na końcu
  1. AND n1.name= n2.name


i dodaj sobie wartość unique na któryś z rekordów, nie będą się tworzyły takie same wpisy..

Ten post edytował adek- 19.01.2013, 11:31:09
Go to the top of the page
+Quote Post
Giluś
post
Post #4





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

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


Zrobiłem coś takiego:

  1. $wynik = mysql_query("SELECT email FROM portal_user group by email having count(*) > 1") or die('Błąd: '.mysql_error());
  2.  
  3. $i = 1;
  4. while($r = mysql_fetch_assoc($wynik)) {
  5. echo ''.$i++.' - '.$r['email'].'<br /><hr>';
  6. }


I pokazało mi ~400 rekordów, to są te rekordy które się powtarzają tak ?
Go to the top of the page
+Quote Post
mortus
post
Post #5





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Nie, to są adresy e-mail, które się powtarzają. Identyfikatory rekordów zyskasz dodając do zapytania GROUP_CONCAT, jak wyżej pisałem.
Go to the top of the page
+Quote Post
Giluś
post
Post #6





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

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


Dobra, dobra poradziłem sobie. wink.gif

Dzięki bardzo.
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 Aktualny czas: 22.08.2025 - 09:52