[Db] problema interessante sql
Marcello Vezzelli
marcello a vezz.it
Ven 6 Apr 2007 11:56:25 CEST
Ciao a tutti,
ho una rubrica che contiene indirizzi email e un riferimento all'utente
proprietario del contatto.
La rubrica dell'utente 1 quindi è fatta così:
(id,email,rif_utente,descrizione)
1,email a email.it,1,prova1
2,cucu a ciao.it,1,prova2
3,zio a budda.net,1,prova3
4,zio a budda.net,1,prova3bis
ecc.
Siccome devo mettere un indice univoco su rif_utente ed email (gli
utenti d'ora in poi non possono inserire contatti email duplicati),
dovrei trovare i contatti duplicati per tutti gli utenti: ci sono utenti
che hanno inserito più volte la stessa email con descrizione diversa
(era possibile e desiderato dall'architettura precedente per una serie
di motivi che non ha senso riportare qui)
Con questa query mi elenco i contatti doppi e i loro proprietari.
SELECT count(id) as zk,rif_utente,email FROM `contatti` group by
rif_utente,email having zk>1
Ora quello che vorrei fare è eliminare i contatti doppi, quindi se una
mail è inserita 3 volte in uno stesso utente, cancellare le ultime 2
copie e tenere la prima.
Con una query di questo tipo riesco ad ottenere i contatti dal secondo
in poi.
SELECT * FROM `contatti` WHERE rif_utente=1 and email='zio a budda.net'
limit 1,100
Ora i contatti doppi (nel mondo reale del database che devo modificare)
sono pochi, quindi potrei benissimo farlo "a mano".
Però mi sembrava un problema interessante, e volevo sentire opinioni da
qualcuno più esperto su un approccio per andare fino in fondo alla
questione.
Qualche suggerimento?
Saluti
Marcello
Maggiori informazioni sulla lista
Db