View Full Version : [PHP/MySQL] Eseguri una query dopo 30 secondi
Zombie88
21-05-2011, 12:12
Ciao a tutti allora sto facendo un sito in php collegato a un database e devo riuscire a fare un operazione:
eseguire una query dopo x secondi che l'utente schiaccia il pulsante. La query deve essere eseguita anche se l'utente fa refresh o esce dalla pagina il tempo continua a passare e la query viene eseguita al momento giusto.
Dalla versione 5.1 puoi usare la gestione degli eventi: http://dev.mysql.com/tech-resources/articles/mysql-events.html
Non ho mai usato eventi in mysql, a colpo d'occhio sembrano fare al caso tuo.
Eventualmente anche via php quello che chiedi è fattibile, ma richiede una buona gestione soprattutto nel caso in cui lo stesso utente mandi più richieste (per esempio refresh selvaggio).
Per fare quello che chiedi prova:
<?php
if (!richiesta_autorizzata()) exit(); //Se l'operazione non è permessa, chiudi lo script. Questa parte la dovresti per sicurezza...
ignore_user_abort (true); //Continua lo script anche se l'utente abbandona la pagina o chiude il browser
set_time_limit(0); //Imposta quanti secondi lo script può rimanere in esecuzione 0=infinito. Di default sono 30, settati nei file di conf di php
sleep(30); // Metti in pausa lo script per 30 secondi
// Operazioni sul database
// Altre operazioni
?>
Zombie88
23-05-2011, 14:00
ok grazie mo li provo tutti e 2 e vedo qual'è meglio un altra cosa:
io ho il campo numerico in una tabella(t_somma) che è la somma del valore di altre tabelle (t_1,t_2)è possibile che quando cambio il valore di t_1 o t_2 il campo somma si aggiorni autmoaticamente o deve fare il comando update?
io ho il campo numerico in una tabella(t_somma) che è la somma del valore di altre tabelle (t_1,t_2)è possibile che quando cambio il valore di t_1 o t_2 il campo somma si aggiorni autmoaticamente o deve fare il comando update?
Una cosa del genere la puoi fare da mysql con i trigger.
Non ho presente l'ambito in cui hai progettato la base di dati, tuttavia considerare un attributo come somma di altri due attributi (anche di altre tabelle) è tipicamente poco consigliato. L'uso di attributi derivati, come quello del tuo caso, è consigliabile solo nelle situazioni in cui la determinazione del valore sarebbe troppo pesante da fare sul momento, come per esempio calcolare il numero di post fatti da un utente in un forum. Se dovessi calcolarlo per ogni utente ogni volta che visualizzo un thread sul browser sarebbe pesantissimo perchè dovrei fare una ricerca di molteplici record in una tabella di decine di migliaia di record... Invece nel tuo caso è una somma tra due valori, ti consiglierei di valutare di modificare la gestione e calcolare la somma solo quando ti serve mediante query (usando un join).
Zombie88
24-05-2011, 19:55
si volendo posso farlo tramite query, quindi se mi sconsigli farò cosi, solo che quella somma la devo fare su tipo 1000 righe ogni 8 ore dici che è comunque meglio l'update?
si volendo posso farlo tramite query, quindi se mi sconsigli farò cosi, solo che quella somma la devo fare su tipo 1000 righe ogni 8 ore dici che è comunque meglio l'update?
Dovresti fare una analisi dell'uso della base di dati.
Quante volte in tutto al giorno ti serve avere quella somma?
Quante volte in tutto al giorno aggiorni uno degli attributi addendi (e quindi la somma)?
Gli accessi sono concentrati in determinati momenti o sparsi?
L'unico caso in cui è utile avere un attributo somma è se ti serve continuamente (almeno una volta al secondo) la somma e gli attributi non sono modificati troppo spesso (se fossero modificati di continuo, dovresti continuamente ricalcolare la somma appesantendo la base).
Nel tuo caso non ho capito se le 1000 somme le fai tutte insieme o sparse. Se sono sparse su 8 ore direi che la somma non ti serve averla già fatta, ma anche se fossero concentrate, penso che 1000 righe verrebbero comunque processate in pochi istanti. Magari ci sono pure altre soluzioni, è che non ho la minima idea di che tipo di dati stai trattando.
In ogni caso NON è necessariamente sbagliato usare un attributo derivato, semplicemente tali situazioni, insieme alle ridondanze, vengono tipicamente eliminate in fase di normalizzazione della base di dati (ovvero quel processo di progettazione del database che porta un progetto dalla fase concettuale a quella logica e fisica). In pratica, quando studi basi di dati all'università o alle superiori, ti viene detto di evitare come la peste l'uso di attributi derivati. Ciò non toglie che la base di dati funzioni perfettamente anche lo stesso.
Zombie88
25-05-2011, 00:47
okok proverò con l'update grazie :)
Zombie88
05-06-2011, 19:23
sono tornato :D con il problema originario....allora gli event vanno bene ma non essendo multitasking posso eseguirne uno alla volta e quindi non va bene :cry: altre soluzioni ne avete? riscrivo il rpoblema nel caso non abbiate voglia di leggere su :)
Sto facendo un sito in php collegato a un database e devo riuscire a fare un operazione:
eseguire una query dopo 30 secondi che l'utente schiaccia il pulsante. La query deve essere eseguita anche se l'utente fa refresh o esce dalla pagina il tempo continua a passare e la query viene eseguita al momento giusto.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.