Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074

    modificare campi inserendo valori progressivi

    Nel mio db, ho una tabella (feed) in cui vengono inseriti frequentemente svariati dati.
    Il numero massimo di dati che vengono utilizzati (mostrati) è però 50, e quindi tutti i dati che eccedono questo numero sono - in effetti - ridondanti.
    Vorrei quindi eliminarli via via. Ad es., se ci sono 52 items nella tabella, quelli contrassegnati dai n° 1 e 2 dovrebbero essere cancellati.
    Inizialmente, avevo pensato questa soluzione:
    Codice PHP:
        $resultC mysql_query("SELECT * FROM `feed`");
    $totrow mysql_num_rows$resultC);
    if (
    $totrow 50) {
    $delrow $totrow-50;
        
    $resultD mysql_query("DELETE FROM `feed` WHERE feed_id < $delrow");

    Ma così non mi funziona, per la semplice ragione che la numerazione (feed_id) sale...
    Insomma, se ho 73 items nella tabella, $totrow sarà uguale a 73, e quindi $delrow sarà uguale a 23.
    La prima volta che quest'azione sarà eseguita, è tutto ok, perchè verranno cancellati gli items da 1 a 22.
    Ma poniamo che vengano aggiunti altri 3 items.
    A questo punto, $totrow sarà uguale a 53, e quindi $delrow sarà uguale a 3.
    Ma ovviamente non verrà cancellato nessun item, in quanto il campo feed_id più basso sarà 23 (quindi maggiore di 3!...
    La cosa migliore, quindi (secondo me) sarebbe di far precedere alla query DELETE un'altra query che modifichi il contenuto dei campi feed_id, ricostruendo una numerazione da 1 a salire.
    Ma come potrei fare ad ottenere questo risultato?
    metatad
    graphic & web design

  2. #2
    non puoi semplicemente usare un LIMIT??

    ti ricordo che con SELECYT * FROM table ORDER BY id LIMIT 0,5 ti ritorna i primi 5 campi

    fatti una select tirando fuori i campi che ti servono, e poi li cancelli
    www.gext.it

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    si ma... poiché (per restare al tuo esempio)
    ORDER BY id LIMIT 0,5
    5 è equivalente ad una variabile, se scrivo
    ORDER BY id LIMIT 0,$miavar
    funzionerà?
    metatad
    graphic & web design

  4. #4
    DELETE FROM somelog WHERE user = 'jcole'
    ORDER BY timestamp_column LIMIT 1;

    sul sito di mysql c'è questa che potrebbe esserti utile, conti il numero di record, sottrai quelle che vuoi tenere e la metti nella query

    $togliere = $totale - $numero;

    DELETE FROM tabella ORDER BY id LIMIT $togliere;

    ciao

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    thanx...
    metatad
    graphic & web design

  6. #6
    Una in piu' puo' sempre tornare utile prima o poi....

    Codice PHP:

    // seleziona il primo id eccedende i 50 
    $resultC mysql_query("SELECT feed_id FROM `feed` order by feed_id DESC  limit 50, 1"); 

    // controlla se e' vero che ce ne almeno uno
    if (mysql_num_rows($resultC)  == ) { 

             
    // se e' vero allora leggi l'id
            
    $delrow mysql_fetch_row$resultC); 

            
    // cancella da quell'id verso il basso - sono tutti eccedenti
            
    $resultD mysql_query("DELETE FROM `feed` WHERE feed_id <=  $delrow[0] "); 




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

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.