Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    727

    eliminare record presente UNA SOLA VOLTA

    ho una tabella con ben 27.000 record e ho l'esigenza di eliminare i record presenti una sola volta e di lasciare quelli presenti due volte, tre volte e così via
    esempio:

    pippo
    paperino
    pluto
    paperino
    pluto
    pluto

    il php dovrebbe eliminarmi pippo perchè presente UNA sola volta

    non so da che parte iniziare...
    Ho provato a cercare in giro ma ho trovato solo tantissime spiegazioni per eliminare i record doppi ma... in pratica è il contrario di cosa serve a me....
    un aiutino??

  2. #2
    Usa una tabella temporanea e scorrendo la tabella origine scrivi nella tabella temporanea.

    Crea adeguata chiave primaria nella tabella temporanea

    I record nella tabella temporanea ti serviranno per cancellare record nella tabella origine

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,452
    Non so se ci sia un modo più efficiente usando magari qualche funzione SQL, ma come prima idea io farei così:
    Codice PHP:
    $query "SELECT DISTINCT nome FROM tabella"//leggo tutti i nomi presenti senza avere ripetizioni
    $result mysql_query($query);

    while(
    $row mysql_fetch_assoc($result)) {
        
    $query "SELECT COUNT(nome) AS presenze FROM tabella WHERE nome='".$row['nome']."'";
        
    $result mysql_fetch_assoc(mysql_query($query));
        if(
    $result['presenze'] == 1) {
            
    $query "DELETE FROM tabella WHERE nome='".$row['nome']."'";
            
    mysql_query($query);
        }

    E' un po' macchinoso, ma al volo non mi viene una soluzione più efficace, comunque il lavoro che ti serve lo fa.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    727
    uh grazie delle rispostee
    io intanto ero arrivato a contare i record presenti una sola volta, così-->

    SELECT campo, count(campo) as conteggio
    from tabella group by campo
    having count(campo) = 1

    tu invece li conti con distinct-->

    SELECT DISTINCT campo FROM tabella

    ebbene li ho provati entrambi... ma perchè non danno lo stesso risultato numerico??

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,452
    Ecco... mi ero dimenticato della clausola HAVING.

    Con la tua query dovrebbe funzionare e lo script diventa più efficiente
    Codice PHP:
    $query "SELECT campo, count(campo) as conteggio from tabella group by campo having count(campo) = 1";
    $result mysql_query($query); //qui ci sono tutti i nomi presenti una sola volta

    while($row mysql_fetch_assoc($result)) {
        
    $query "DELETE FROM tabella WHERE campo='".$row['campo']."'";
        
    mysql_query($query);


  6. #6
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Originariamente inviato da theseo
    uh grazie delle rispostee
    io intanto ero arrivato a contare i record presenti una sola volta, così-->

    SELECT campo, count(campo) as conteggio
    from tabella group by campo
    having count(campo) = 1

    tu invece li conti con distinct-->

    SELECT DISTINCT campo FROM tabella

    ebbene li ho provati entrambi... ma perchè non danno lo stesso risultato numerico??
    Le due query non sono equivalenti, perchè nella tua estrai tutti i record presenti una e una sola volta, nell'altra vengono estratti tutti i record senza ripetizioni, quindi sia quelli che sono presenti una sola volta che quelli presenti più volte ma che che vengono estratti una sola volta.

    Per capirci con l'elenco

    pippo
    paperino
    pluto
    paperino
    pluto
    pluto

    La Distinct di torna la tabella

    pippo
    paperino
    pluto

    La tua query ti ritorna

    pippo

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    727
    grazie, è tutto chiarissimo

    che figata!!!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.