Hai ragione.
Allora la situazione è questa: mi ritrovo un db con una tabella dedicata a memorizzare indirizzi email per un servizio di newsletter. Per motivi vari può capitare che ci siano degli indirizzi duplicati, si lo so che questo andrebbe evitato con altri sistemi però questo è un caso particolare in cui, per una raffinata strategia aziendale, deve essere lasciato capitare per poi eventualmente andare a sistemare le cose a manina.
Quindi l'esigenza era di inserire in un gestionale la possibilità di visualizzare tutti gli indirizzi duplicati per poi decidere quale togliere e quale lasciare.
Di solito mi piace raggiungere delle soluzioni con un'unica query ma, siccome non sono una cima, qualche volta come in questo caso la faccenda incomincia a crearmi confusione e quindi preferisco scomporre il problema in parti più piccole.
Per l'esempio basta una visione semplificata della tabella "iscrizioni_newsletter" con dei campi tipo
- id_iscrizione
- indirizzo_email
- nome_cognome
...
...
io per esigenze particolari ho dovuto risolvere con tre query ma effettivamente ne bastano due
Per prima cosa estraggo gli indirizzi email duplicati, e li inserisco in un array
Codice PHP:
$result_email_duplicate = mysql_query("
SELECT indirizzo_email, COUNT(indirizzo_email) as duplicati
FROM iscrizioni_newsletter
GROUP BY indirizzo_email
HAVING duplicati > 1
") ;
while ( $dati_email_duplicate = mysql_fetch_array($result_email_duplicate) ) {
$array_indirizzi_duplicati[] = "'".$dati_email_duplicate['indirizzo_email']."'" ;
}
Poi l'array ottenuto lo utilizzo per trovare i dati di tutti gli indirizzi duplicati
Codice PHP:
$result = mysql_query("
SELECT *
FROM iscrizioni_newsletter
WHERE indirizzo_email IN (".implode(',',$array_indirizzi_duplicati).")
ORDER BY indirizzo_email
") ;
Occhio che se non ci sono duplicati e l'array rimane vuoto la query dà errore, quindi prima di eseguire la seconda query è meglio verificare.