azioni temporizzate in un DBMS
Moderatore: Staff
Regole del forum
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
- Paoletta
- Staff

- Messaggi: 3974
- Iscritto il: lun 25 apr 2005, 0:00
- Slackware: 14.2 - 64 bit
- Desktop: fluxbox
- Località: Varese
azioni temporizzate in un DBMS
ciao a tutti,
avrei bisogno di cancellare dei record da un database dopo un certo numero di giorni dall'inserimento; a questo scopo pensavo di definire un trigger ma ho visto che permettono l'esecuzione delle azioni solo o prima o dopo l'inserimento di un record (e non dopo qualche giorno dall'inserimento...)...esiste un modo per risolvere il problema?
grazie 1000!
Paola
avrei bisogno di cancellare dei record da un database dopo un certo numero di giorni dall'inserimento; a questo scopo pensavo di definire un trigger ma ho visto che permettono l'esecuzione delle azioni solo o prima o dopo l'inserimento di un record (e non dopo qualche giorno dall'inserimento...)...esiste un modo per risolvere il problema?
grazie 1000!
Paola
- conraid
- Staff

- Messaggi: 13526
- Iscritto il: gio 14 lug 2005, 0:00
- Nome Cognome: Corrado Franco
- Slackware: current64
- Desktop: kde
- Località: Livorno
- Contatta:
Re: azioni temporizzate in un DBMS
Lo devi fare solo lato DB o puoi farlo tramite codice? Nel senso è il sistema web da mettere in hosting?
Io solitamente imposto queste cose nel programma, anche se purtroppo è legato ad una azione, che può essere anche un accesso alla pagina.
A meno che il provider non ti dia accesso al cron, imposti un qualche controllo nelle pagine php che una volta al giorno (altro campo del db o un file di testo dove tieni il conto) cancella i record vecchi.
a dire il vero solitamente io li sposto in un'altra tabella per un po', non si sa mai
Io solitamente imposto queste cose nel programma, anche se purtroppo è legato ad una azione, che può essere anche un accesso alla pagina.
A meno che il provider non ti dia accesso al cron, imposti un qualche controllo nelle pagine php che una volta al giorno (altro campo del db o un file di testo dove tieni il conto) cancella i record vecchi.
a dire il vero solitamente io li sposto in un'altra tabella per un po', non si sa mai
- voulaz
- Linux 0.x

- Messaggi: 39
- Iscritto il: lun 9 ott 2006, 14:53
- Slackware: 12.0
- Desktop: KDE
- Località: Milano
Re: azioni temporizzate in un DBMS
Dipende dal DB che usi.
In Oracle puoi creare un "Job" che può lanciare comandi o procedure secondo la cronologia impostata (come logica somiglia molto al cron di linux).
Per gli altri DB non ho esperienza, ma puoi cercare se esiste qualcosa di simile.
Spero di esserti stato utile.
Ciao.
PS.
In MySQL 5.1 si chiamano EVENT.
In Oracle puoi creare un "Job" che può lanciare comandi o procedure secondo la cronologia impostata (come logica somiglia molto al cron di linux).
Per gli altri DB non ho esperienza, ma puoi cercare se esiste qualcosa di simile.
Spero di esserti stato utile.
Ciao.
PS.
In MySQL 5.1 si chiamano EVENT.
- Paoletta
- Staff

- Messaggi: 3974
- Iscritto il: lun 25 apr 2005, 0:00
- Slackware: 14.2 - 64 bit
- Desktop: fluxbox
- Località: Varese
Re: azioni temporizzate in un DBMS
posso anche metterlo nel codice PHP...il problema è: come innesco l'azione?conraid ha scritto:Lo devi fare solo lato DB o puoi farlo tramite codice? Nel senso è il sistema web da mettere in hosting?
finito questo "per un po'", io li devo cancellare...conraid ha scritto: a dire il vero solitamente io li sposto in un'altra tabella per un po', non si sa mai
- conraid
- Staff

- Messaggi: 13526
- Iscritto il: gio 14 lug 2005, 0:00
- Nome Cognome: Corrado Franco
- Slackware: current64
- Desktop: kde
- Località: Livorno
- Contatta:
Re: azioni temporizzate in un DBMS
la inneschi sempre ad ogni accessoPaoletta ha scritto:posso anche metterlo nel codice PHP...il problema è: come innesco l'azione?conraid ha scritto:Lo devi fare solo lato DB o puoi farlo tramite codice? Nel senso è il sistema web da mettere in hosting?
se tu metti il comando in una pagina php inclusa sempre, basta che qualcuno visiti il sito e l'azione è innescata.
se hai paura di non avere visitatori metti qualche comando con curl in qualche server
per esempio io per aggiornare slackers.it con i cambiamenti del changelog ho una pagina php che mi crea il tutto, ma per essere sicuro che viene lanciata ogni ora la richiamo con curl
Certo, se hai un cron e puoi usare i comandi del database direttamente li, fai prima e meglio, ma non sempre è possibile. A me per esempio il provider permette di inserire alcuni comandi nel cron, ma non i comandi mysql
- aschenaz
- Staff

- Messaggi: 4621
- Iscritto il: mer 28 lug 2004, 0:00
- Nome Cognome: Nino
- Slackware: current
- Kernel: 5.4.x
- Desktop: KDE
- Località: Reggio Calabria
- Contatta:
Re: azioni temporizzate in un DBMS
Io tempo fa ho avuto bisogno di un'azione del genere.
Nella index ho messo questa porzione di script:
Volendo si può anche semplificare... 
Nella index ho messo questa porzione di script:
Codice: Seleziona tutto
$intervallogiorni=8; // numero giorni che devono essere trascorsi
$res=mysql_query("SELECT ID,Data FROM nometabella");
while($row=mysql_fetch_row($res)) {
$id=$row[0];
$startdate=$row[1];
list($anno,$mese,$giorno)=explode("-",$startdate);
$annocorrente=date("Y");
$mesecorrente=date("m");
$giornocorrente=date("d");
if(mktime(0,0,0,$mese,$giorno+$intervallogiorni,$anno) < mktime(0,0,0,$mesecorrente,$giornocorrente,$annocorrente)) mysql_query("DELETE FROM nometabella WHERE ID='$id');
}
- Paoletta
- Staff

- Messaggi: 3974
- Iscritto il: lun 25 apr 2005, 0:00
- Slackware: 14.2 - 64 bit
- Desktop: fluxbox
- Località: Varese
Re: azioni temporizzate in un DBMS
azchenaz, sei sicuro che il tuo codice sia corretto? Una somma di questo tipo:aschenaz ha scritto:Io tempo fa ho avuto bisogno di un'azione del genere.
Nella index ho messo questa porzione di script:
Volendo si può anche semplificare...Codice: Seleziona tutto
$intervallogiorni=8; // numero giorni che devono essere trascorsi $res=mysql_query("SELECT ID,Data FROM nometabella"); while($row=mysql_fetch_row($res)) { $id=$row[0]; $startdate=$row[1]; list($anno,$mese,$giorno)=explode("-",$startdate); $annocorrente=date("Y"); $mesecorrente=date("m"); $giornocorrente=date("d"); if(mktime(0,0,0,$mese,$giorno+$intervallogiorni,$anno) < mktime(0,0,0,$mesecorrente,$giornocorrente,$annocorrente)) mysql_query("DELETE FROM nometabella WHERE ID='$id'); }
Codice: Seleziona tutto
$giorno+$intervallogiorni- DanBadJar
- Linux 4.x

- Messaggi: 1027
- Iscritto il: ven 28 lug 2006, 19:27
- Nome Cognome: Daniele Malavasi
- Slackware: 13.1
- Kernel: 2.6.34.1
- Desktop: XFCE - Gnome
- Località: Bologna
- Contatta:
Re: azioni temporizzate in un DBMS
Si, ma in questo caso la index deve essere eseguita. Se nessuno visita la index non viene svolta nessuna azione sul DBMS.aschenaz ha scritto:Io tempo fa ho avuto bisogno di un'azione del genere.
Nella index ho messo questa porzione di script:
Volendo si può anche semplificare...Codice: Seleziona tutto
$intervallogiorni=8; // numero giorni che devono essere trascorsi $res=mysql_query("SELECT ID,Data FROM nometabella"); while($row=mysql_fetch_row($res)) { $id=$row[0]; $startdate=$row[1]; list($anno,$mese,$giorno)=explode("-",$startdate); $annocorrente=date("Y"); $mesecorrente=date("m"); $giornocorrente=date("d"); if(mktime(0,0,0,$mese,$giorno+$intervallogiorni,$anno) < mktime(0,0,0,$mesecorrente,$giornocorrente,$annocorrente)) mysql_query("DELETE FROM nometabella WHERE ID='$id'); }
IMHO La miglior cosa è avere accesso al crontab, della macchina (o ad un altro eventuale schedulatore) e crearsi appositi script che eseguono i compiti necessari.
Chi di voi lavora o ha lavorato su grossi DB in esercizio sa che il metodo che ho suggerito è una pratica molto comune.
Inutile dire che con i provider "standard" la cosa non è affatto possibile, a meno che non si disponga di un proprio server in housing.
- Paoletta
- Staff

- Messaggi: 3974
- Iscritto il: lun 25 apr 2005, 0:00
- Slackware: 14.2 - 64 bit
- Desktop: fluxbox
- Località: Varese
Re: azioni temporizzate in un DBMS
È anche vero che se nessuno visita la index vuol dire che nessuno ordina oggetti e che quindi non si sente il bisogno di eliminarli;DanBadJar ha scritto: Si, ma in questo caso la index deve essere eseguita. Se nessuno visita la index non viene svolta nessuna azione sul DBMS.
- conraid
- Staff

- Messaggi: 13526
- Iscritto il: gio 14 lug 2005, 0:00
- Nome Cognome: Corrado Franco
- Slackware: current64
- Desktop: kde
- Località: Livorno
- Contatta:
Re: azioni temporizzate in un DBMS
può arrivare al sito in altra pagina, mettilo in un header, in qualcosa che carichi sempre tipo il file dove imposti la connessione
non conosco postgresql, non so come salva i campi dati, ma mi baserei su quelli, al limite converti in timestamp
non conosco postgresql, non so come salva i campi dati, ma mi baserei su quelli, al limite converti in timestamp
- aschenaz
- Staff

- Messaggi: 4621
- Iscritto il: mer 28 lug 2004, 0:00
- Nome Cognome: Nino
- Slackware: current
- Kernel: 5.4.x
- Desktop: KDE
- Località: Reggio Calabria
- Contatta:
Re: azioni temporizzate in un DBMS
No, ci pensa mktime (la somma, in effetti non viene fatta sul giorno ma sul timestamp).Paoletta ha scritto:...
azchenaz, sei sicuro che il tuo codice sia corretto? Una somma di questo tipo:potrebbe portare a date invalide (tipo il 38 di agosto...)Codice: Seleziona tutto
$giorno+$intervallogiorni
Prova e vedrai che funziona...
Poi, per quanto riguarda la necessità di visitare l'index..., beh, penso che
a te serve che i record "scaduti" non vengano visualizzati quando si visita
il sito, no? E quindi, se non si visita, i record rimangono, ma nessuno li vede;
se si visita, lo script elimina i record e hai raggiunto il tuo scopo.
Tutto questo sempre se stiamo parlando di un sito...
- conraid
- Staff

- Messaggi: 13526
- Iscritto il: gio 14 lug 2005, 0:00
- Nome Cognome: Corrado Franco
- Slackware: current64
- Desktop: kde
- Località: Livorno
- Contatta:
Re: azioni temporizzate in un DBMS
non per ripetere le solite cose nino, ma non tutti usano solo una index che richiama tutte le pagine, io per esempio no, e così altri software free ecommerce o cmsaschenaz ha scritto: Poi, per quanto riguarda la necessità di visitare l'index..., beh, penso che
a te serve che i record "scaduti" non vengano visualizzati quando si visita
il sito, no?
se io per esempio arrivo ad una pagina da google, posso andare su pippo.url/prodotto.php?id=123 e metterlo nel carrello senza passare dalla index, era questo che intendevo
se invece metti il codice dove hai l'accesso al db sai che viene chiamato "sempre"
- aschenaz
- Staff

- Messaggi: 4621
- Iscritto il: mer 28 lug 2004, 0:00
- Nome Cognome: Nino
- Slackware: current
- Kernel: 5.4.x
- Desktop: KDE
- Località: Reggio Calabria
- Contatta:
Re: azioni temporizzate in un DBMS
Ma certo, l'index era solo un esempio...
- DanBadJar
- Linux 4.x

- Messaggi: 1027
- Iscritto il: ven 28 lug 2006, 19:27
- Nome Cognome: Daniele Malavasi
- Slackware: 13.1
- Kernel: 2.6.34.1
- Desktop: XFCE - Gnome
- Località: Bologna
- Contatta:
Re: azioni temporizzate in un DBMS
Se nessuno ordina oggetti (perchè come dici tu non visita la index) non significa che non siano mai stati ordinati, quindi secondo me il bisogno di eliminarli rimane.Paoletta ha scritto:È anche vero che se nessuno visita la index vuol dire che nessuno ordina oggetti e che quindi non si sente il bisogno di eliminarli;DanBadJar ha scritto: Si, ma in questo caso la index deve essere eseguita. Se nessuno visita la index non viene svolta nessuna azione sul DBMS.
- Paoletta
- Staff

- Messaggi: 3974
- Iscritto il: lun 25 apr 2005, 0:00
- Slackware: 14.2 - 64 bit
- Desktop: fluxbox
- Località: Varese
Re: azioni temporizzate in un DBMS
Se sono stati ordinati almeno una persona fa l'accesso al sito: l'amministratore, per togliere gli ordini; per cui il problema in questo caso è risoltoDanBadJar ha scritto: Se nessuno ordina oggetti (perchè come dici tu non visita la index) non significa che non siano mai stati ordinati, quindi secondo me il bisogno di eliminarli rimane.