Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    24

    [SQL and PHP] valori dinamici che cambiano ogni secondo sul database.

    Salve gente ho appena creato sul mio database delle tabelle che verrà usato per individuare la gente bannata della mia chat.
    codice:
    ID          login       motivo       tempo      bannato_da
    
    1           Raziel        esempio      60             Mod
    Ho fatto un esempio sopra,mi interessa che quando inserisco un numero sulla tabella,vorrei che si decrementa ogni valore in ogni secondo e quando raggiunge lo 0 l intera riga si deve cencellare.
    Ad esempio nella tabella di sopra dopo 60 secondi la riga deve essere eliminata.
    Mi potete dire come si fa questa operazione,qualche script,qualche opzione di mysql???
    Se non avete capito quello che voglio ditemelo please

  2. #2
    Difficile che sia il database a farlo, dovrebbe essere un file php eseguito tramite cron job ogni (per es.) 10 secondi.

  3. #3
    Utente di HTML.it L'avatar di sotoli
    Registrato dal
    Mar 2008
    Messaggi
    150
    Se hai la versione 5.1 di mysql, dai un'occhiata QUI
    Crestron Control Systems and AMX Control Systems Programmer

  4. #4

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    24
    Mi potete spiegare come usare questo
    codice:
    CREATE 
        [DEFINER = { user | CURRENT_USER }]
        EVENT 
        [IF NOT EXISTS]
        event_name    
        ON SCHEDULE schedule
        [ON COMPLETION [NOT] PRESERVE]
        [ENABLE | DISABLE | DISABLE ON SLAVE]
        [COMMENT 'comment']
        DO sql_statement;
    
    schedule:
        AT timestamp [+ INTERVAL interval] ...
      | EVERY interval 
        [STARTS timestamp [+ INTERVAL interval] ...] 
        [ENDS timestamp [+ INTERVAL interval] ...]
    
    interval:
        quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
                  WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
                  DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
    Nn riesco a capirlo come lo posso integrare con la mia tabella?

  6. #6
    Utente di HTML.it L'avatar di sotoli
    Registrato dal
    Mar 2008
    Messaggi
    150
    Guarda l'esempio che c'è sotto alla descrizione della sintassi del comando alla pagina che ti ho linkato, ovvero questo:

    codice:
    CREATE EVENT myevent
        ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
        DO
          UPDATE myschema.mytable SET mycol = mycol + 1;
    Con qualche modifica si può adattare al tuo caso.
    Crestron Control Systems and AMX Control Systems Programmer

  7. #7
    Credo non sia necessario scomodare la gestione di queste cose in mysql, anche perchè potrebbe diventare molto oneroso per il server fare questi controlli.

    Visto che si tratta di una chat credo che l'utente viene a conoscenza di essere bannato dopo un accesso o un tentativo di scrittura nella chat...la soluzione è qui.

    Basta che sia la chat stessa a controllare che la riga non sia stata inserita più di X tempo fa.
    Ovviamente il database dovrebbe diventare:
    codice:
    ID          login       motivo                    data                    tempo     bannato_da
    
    1           Raziel        esempio      2009/01/04 15:00:00            60           Mod
    quindi lo script della chat non deve far altro che cancellare le righe di quella tabella in cui il campo "data" sia troppo vecchio in relazione al campo "tempo".
    Administrator of NAMDesign.Net

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    24
    In poche parole devo far confrontare il 'tempo' con 'data'??
    Fatemi un esempio con dei script please

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    24
    Guarda l'esempio che c'è sotto alla descrizione della sintassi del comando alla pagina che ti ho linkato, ovvero questo:

    codice:CREATE EVENT myevent
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
    DO
    UPDATE myschema.mytable SET mycol = mycol + 1;


    Con qualche modifica si può adattare al tuo caso.

    potrei fare cosi?
    codice:
    CREATE TABLE `prova`(
    `ID` INT( 20 ) NOT NULL AUTO_INCREMENT ,
    `login` VARCHAR( 50 ) NOT NULL ,
    `Motivo` VARCHAR( 50 ) NOT NULL ,
    `tempo` VARCHAR( 50 ) NOT NULL ,
    PRIMARY KEY ( `ID` )
    
        CREATE EVENT cancellare_lista_bannati
        ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
        DO
          UPDATE prova SET tempom = tempo + 1;)
    CORREGGETEMI Please

  10. #10
    Utente di HTML.it L'avatar di sotoli
    Registrato dal
    Mar 2008
    Messaggi
    150
    Io avrei fatto in un altro modo, ogni volta che devi inserire un utente bannato nella tabella, esegui un query di inserimento e subito dopo una query per creare l'evento di cancellazione dalla tabella dopo il tempo che vuoi.
    Riprendendo la tua situazione, potresti fare una cosa di questo tipo:

    Codice PHP:
    // ho preso i dati dal tuo esempio
    $id 1;
    $login "Raziel";
    $motivo "esempio";
    $tempo 60;
    $bannato_da "Mod";

    $result mysql_query("INSERT INTO tab_bannati
                           VALUES(
    $id, '$login', '$motivo', $tempo, '$bannato_da');"$connessione); 
    e subito dopo:
    Codice PHP:
    $event_name "ev".$id;
    $result mysql_query("CREATE EVENT $event_name
                           ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
                           DO DELETE FROM tab_bannati WHERE ID = 
    $id;"$connessione); 
    In questo modo, dopo 1 minuto, quella riga verrà cancellata.
    Non ho avuto modo di provarlo perché non ho la versione 5.1 di mysql, ho la 5.0.
    Provalo e dimmi se funziona o no.
    Crestron Control Systems and AMX Control Systems Programmer

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.