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

    cancellare a partire dal recordset 50

    Salve a tutti

    ho un problema su una tabella che è diventata troppo pesante, 50MB per 300.000 record e che vorrei sfoltire.

    Poichè è una tabella di una sorta di forum, in cui, per ogni argomento (800 circa) ci sono centinaia di messaggi postati, vorrei lasciare solo gli ultimi 100 per ogni argomento, e rimuovere quindi quelli piu vecchi.

    Come posso fare?

    Grazie mille
    Perchè uso Maxthon? | Mi piace questa chat

  2. #2
    fai una select prima e punti ad un id, poi cancelli.

    codice:
    SELECT * from tabella
    where [la condizione dell'argomento]
    order by id DESC
    LIMIT 50 , 1
    
    e ottieni il min [id riferimento]
    
    poi:
    
    DELETE FROM TABELLA
    WHERE [la condizione dell'argomento]
    AND id < [id riferimento]

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

  3. #3

    Re: cancellare a partire dal recordset 50

    Originariamente inviato da Bukowski
    Poichè è una tabella di una sorta di forum, in cui, per ogni argomento (800 circa) ci sono centinaia di messaggi postati, vorrei lasciare solo gli ultimi 100 per ogni argomento, e rimuovere quindi quelli piu vecchi.

    Come posso fare?

    Grazie mille
    azz.. 800 argomenti !!! Non avevo realizzato prima.

    potresti allora fare prima una selezione degli argomenti che abbiano un count > 100. poi fare la scansione del result set eseguendo le due query postate prima....

    Esempio:

    codice:
    $query = "
    select argomento, count(*) as tot
    from tabella
    group by argomento
    having tot > 100
    order by argomento
    ";
    
    ciclo while estraendo argomento
    
    while ($argomento = mysql_fetch_assoc($res) ) {
    
    $query1 =  "select id from tabella
                   where argomento = '$argomento[0]'
                   order by id DESC
                   LIMIT 50 , 1";
    
    Esegui la query ed estrai id minimo da tenere
    
    $query2 = "DELETE FROM TABELLA
                   WHERE argomento = '$argomento[0]'
                   AND id < [id riferimento]";
    
    Esegui la query e chiudi il WHERE
    
    }
    tecnicamente dovrebbe funzionare. Completa il codice e prova su una tabella di test ovviamente.

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

  4. #4
    sembra funzionare

    grazie mille
    Perchè uso Maxthon? | Mi piace questa chat

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.