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

    [MYSQL] cancellare record a tempo

    Ciao
    Sono ancora su operazioni a tempo.
    Ho una tabella dove registro le visite a determinate pagine.
    Tra i vari campi c'è il campo data_visita di tipo timestamp e come Predefinito CURRENT_TIMESTAMP.
    Siccome, aggiungendo nuove pagine da monitorare, la tabella ovviamente tende a gonfiarsi in maniera spropositata, vorrei poter cancellare i record più vecchi di 1 o 2 mesi.
    Come posso organizzare il delete in m odo che all'apertura della pagina mi cancelli i record più vecchi?
    Grazie per eventualisuggerimenti.

  2. #2
    Gestione lato Client:
    All'apertura della pagina lanci il delete sulla tabella: delete <TABELLA> .. where data_visita<oggi-1/2 mesi

    Gestione lato Server:
    Trigger che ad ogni insert cancella i record più vecchi di CURRENT_TIMESTAMP-1/2mesi

  3. #3
    Ti ringrazio della risposta, Nettuno95.
    Ma, tradotto in codice MYSQL, non so cosa debbo metere nella WHERE.
    DELETE FROM table WHERE data_visita ..............

  4. #4
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    WHERE (table.data_visita<(now()-5000000))

    pero non sono sicuro che ti funziona con MySql

    devi regolare quel 5000000 che potrebbero essere secondi
    (ma non conosco a sufficienza MySql)




  5. #5
    Grazie nman
    ora proverò e poi ti dico. Ovviamente prima di usare una query distruttiva (DELETE) la userò in una query di tipo SELECT.
    Dovrebbe funzionare lo stesso, spero.

  6. #6
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Temo di averti detto una scemata.

    Anch'io non riesco a capire cosa rappresenti in effetti quel 5000000
    sembrerebbe 1 mese


    ma poi per fare 2 mesi devo mettere 180000000
    quindi ???????




    Conosco troppo poco MySql
    Fammi sapere se scopri qualcosa



  7. #7
    boh
    excel mi dice:
    60*60*24*30 = 2.592.000 (30 giorni)
    60*60*24*60 = 5.184.000 (60 giorni)

  8. #8
    Eccomi qua
    Mi sa che c'è qualcosa che non va.
    In phpmyadmin locale ho una tabella con 118 record in cui le date vanno dal 2012-05-06 19:37:41 al 2012-06-12 21:26:37
    ho fatto 3 prove:

    codice:
    SELECT * FROM `db_stats` WHERE (data_visita<(now()-2592000))
    2012-05-06 19:37:41 => 2012-06-08 17:26:40	114 record	
    
    SELECT * FROM `db_stats` WHERE (data_visita<(now()-5184000))
    2012-05-06 19:37:41 => 2012-06-07 02:38:07	90 record	
    
    SELECT * FROM `db_stats` WHERE (data_visita<(now()-7776000))
    2012-05-06 19:37:41 => 2012-06-04 13:53:43	80 record
    Mi sembra che i conti non tornino proprio. A seconda del valore che do nella query mi vengono scalati solo i giorni.
    A meno che non bisogna indicare espressamente i giorni o i mesi (die, month)

  9. #9
    Trovato (spero)
    codice:
    SELECT * FROM `db_stats` WHERE (data_visita<(now()-INTERVAL 1 MONTH))
    2012-05-06 19:37:41 => 2012-05-07 01:18:08	16 record
    
    SELECT * FROM `db_stats` WHERE (data_visita<(now()-INTERVAL 2 MONTH))
    nessun record
    
    SELECT * FROM `db_stats` WHERE (data_visita<(now()-INTERVAL 37 DAY))
    2012-05-06 19:37:41 => 2012-05-06 20:03:58	7 record
    Penso che così i risultati siano più congruenti.

    Grazie degli aiuti che mi avete dato.
    Se dovessi notare delle incongruenze mi rifarò vivo

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.