Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Script per cancellari doppioni in un DB

    Ciao a tutti.
    Devo cancellare tutti gli indirizzi email doppioni in un db.Avevo pensato ad uno script php così:

    ...
    ...

    $query = "SELECT * FROM archivio";
    $ris = mysql_query($query);

    while ($cc = mysql_fetch_array($ris))
    {
    $email1=$cc["email"];

    $query2="SELECT * FROM archivio";
    $ris2=mysql_query($query2);
    $numrows = mysql_num_rows($ris2);

    for($x=0; $x<$numrows; $x++){
    $resrow = mysql_fetch_row($ris2);
    $email2 = $resrow[7];
    if ($email1==$email2) {
    $email2="";};
    }
    };

    ...
    ...

    solo che non ho i risultati sperati.
    Qualcuno sa aiutarmi?

  2. #2
    1 - fai una copia in una tabella temporanea dei soli record univoci.
    2 - cancelli (TRUNCATE) tutta la tabella originaria.
    3 - ricopia la tabella temporanea in quella originaria.

    Es.:
    codice:
    1° query
    
    CREATE TEMPORARY TABLE temp
    SELECT * FROM archivio
    GROUP BY email
    ORDER BY id;
    
    2° query
    
    TRUNCATE TABLE archivio;
    
    3° query
    
    INSERT INTO archivio
    SELECT * FROM temp;
    Fine della fiera, non hai manco il tempo di battere le ciglia.

    Vanno eseguite una dietro l'altra da php oppure nella stessa finestra di query se con phpmyadmin. Fai una copia della tabella o un backup prima di eseguire le tre query, non vorrei avere sulla coscienza qualche tuo errore.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    grazie mille...

    mi ero completamente dimenticato della clausola GORUP BY

  4. #4
    Mi serve un'aggiunta...

    cioè dal db devo cancellare i doppioni più vecchi Mi spiego..
    ex:
    id 1500 email nome123@dominio.it
    id 3405 email nome123@dominio.it

    dovrei riuscire a cancellare il record con l'id più basso, nel mio caso quello con 1500.

    come portei fare?

    grazie mille per l'aiuto

  5. #5
    prova così...

    Codice PHP:
    CREATE TEMPORARY TABLE temp
    SELECT 
    FROM archivio
    GROUP BY email
    ORDER BY id DESC

    http://codecanyon.net/category/all?ref=Manuelandro
    And I bet she told a million people that she'd stay in touch, Well all the little promises they dont mean much,When theres
    memories to be made

  6. #6
    mi sa che devi fare un passaggio in piu':
    codice:
    1° query
    CREATE TEMPORARY TABLE first
    SELECT * FROM archivio
    ORDER BY id DESC;
    
    2° query
    
    CREATE TEMPORARY TABLE temp
    SELECT * FROM first
    GROUP BY email
    ORDER BY id;
    
    3° query
    
    TRUNCATE TABLE archivio;
    
    4° query
    
    INSERT INTO archivio
    SELECT * FROM temp;
    Il group by prende il primo record che soddisfa la condizione a prescindere dall'id, cioe' prende il primo che incontra fisicamente nella tabella. Quindi ordinando prima la tabella per ID DESC sei sicuro che ti prendera' solo i record con l'ID piu' alto.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it L'avatar di flessciato
    Registrato dal
    Jun 2002
    Messaggi
    1,522
    ALTER IGNORE TABLE tabella ADD UNIQUE KEY (campo1, campo2)

    questa è più diretta....
    Slack 10 - Apple G5 2.5 - winzoz xp
    php/mysql/apache
    Flash MX / roba in 3D / roba per il video e l'audio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.