[PHP] Eliminare record automaticamente dopo una certa data

asevenx

Utente Attivo
7 Nov 2009
312
0
16
Salve a tutti, ho un database con alcuni record nei quali registro la data di creazione. Volevo sapere se esiste un modo, senza alcuna azione da parte dell'utente,per eliminare automaticamente un record trascorsi tot giorni. Grazie mille.
 

marino51

Utente Attivo
28 Feb 2013
2.931
166
63
Lombardia
dal "task scheduler" del sistema operativo
puoi eseguire periodicamente un job che ti esegua la query direttamente,
oppure uno script php o simili, se hai bisogno di generare parametri complessi per la query

se poi il db che usi te lo permette, puoi schedulare l'attività eseguendo periodicamente una "stored procedure"

insomma, con un po' di fantasia si può trovare quello che serve,
ma senza conoscere il sistema operativo, il db che usi, la complessità della query, la risposta è solo generica, rispecchiando la domanda
 

asevenx

Utente Attivo
7 Nov 2009
312
0
16
Ciao Marino51, grazie per il suggerimento. Provo ad essere più preciso: Ho un sito in PHP che permette l'inserimento di alcuni dati in un database MySQL. Tra questi dati viene registrata anche la data di sistema. Vorrei creare una quary che confronti questa data con quella attuale, e se quest'ultima è successiva a tot giorni (e al verificarsi di un altra condizione, es se un campo della quary ha un certo valore, quindi nella quary ci sarà anche un AND), deve cancellare il record. Questo però deve avvenire (se possibile) senza alcuna azione da parte dell'utente, quindi la quary dovrebbe avviarsi automaticamente. Per il momento volevo sapere se è una cosa fattibile con PHP/MySQL oppure no. Grazie ancora!
 

marino51

Utente Attivo
28 Feb 2013
2.931
166
63
Lombardia
come detto, tutto dipende da quali oggetti sono in uso,

mysql è in grado di gestire la query con "event-scheduler", ma dipende dalla versione
http://dev.mysql.com/doc/refman/5.7/en/event-scheduler.html
http://stackoverflow.com/questions/13872598/autorunning-query-in-mysql

se il sistema operativo è windows, è possibile pianificare uno script php con la query, per esempio guarda qui
https://technet.microsoft.com/en-us/library/cc721931(v=ws.11).aspx

se il sistema operativo è linux, "cron" consente di pianificare lo script

dovresti avere informazioni sufficienti o serve altro ?
 

asevenx

Utente Attivo
7 Nov 2009
312
0
16
Grazie per i suggerimenti. Sono andato sul pannello del PhpMyAdmin dove gestisco i database e ho visto che effettivamente c'è la voce 'eventi'. Quindi ne ho creato un evento per fare una prova:

Codice:
DROP EVENT `my_old_data_cleaner_event`; CREATEDEFINER = `root`@`localhost` EVENT `my_old_data_cleaner_event` ON SCHEDULE EVERY 10 DAY_HOUR STARTS '2016-06-29 01:07:54' ON COMPLETION NOT PRESERVE ENABLE DO DELETE FROM prestazioni WHERE code='001'
In questo modo dovrebbe cancellare il record con 'code' = 001 alle 10, ma non funziona. Sai se ho sbagliato qualcosa?
 

marino51

Utente Attivo
28 Feb 2013
2.931
166
63
Lombardia
Codice:
CREATE
DEFINER = `root`@`localhost`
EVENT `my_old_data_cleaner_event`
ON SCHEDULE EVERY 10 DAY_HOUR STARTS '2016-06-29 01:07:54'
ON COMPLETION NOT PRESERVE ENABLE
DO DELETE FROM prestazioni WHERE code='001'
hai scritto "CREATEDEFINER"
 

asevenx

Utente Attivo
7 Nov 2009
312
0
16
E' il copia-incolla che mi ha attaccato le parole. Diciamo che ho usato l'area per creare gli eventi e a fine processo mi ha restituito quel codice. Ora ho provato inserendo direttamente il codice sql sperando di risolvere. Una domanda, il problema potrebbe essere l'uso delle virgolette diverse tra `root`@`localhost` e '2016-06-29 01:07:54'?
 

marino51

Utente Attivo
28 Feb 2013
2.931
166
63
Lombardia
l' apice singolo è usato per delimitare valori testo, date-time (caso specifico) , non per valori numerici
l' apice "storto" (scusa non so come chiamarlo propriamente) si usa per i nomi delle tabelle, delle colonne, ovvero per tutti gli elementi che identificano un oggetto, non per i valori, MA, quando nel nome è contenuto uno spazio altrimenti sono inutili e dannosi (per la probabilità d'errore)
assegnare nomi, con spazi, ad oggetti è comunque deleterio ( a meno che non ci si voglia fare del male )
 

asevenx

Utente Attivo
7 Nov 2009
312
0
16
Sinceramente non mi intendo di sql, chiedevo per capire se poteva essere quella la causa. Comunque mi crea l'evento, ma non elimina il record. Ti faccio la schermata del form per creare l'evento magari c'è qualcosa che sbaglio lì..

 

asevenx

Utente Attivo
7 Nov 2009
312
0
16
Ho risolto. Dovevo semplicemente attivare lo stato degli eventi che di defoult è disattivato. Grazie mille per i suggerimenti e l'aiuto Marino, l'ultimo link è stato utilissimo.
 

asevenx

Utente Attivo
7 Nov 2009
312
0
16
Scusate se riapro la conversazione, volevo sapere se posso fare un unico evento per più tabelle di database. Grazie
 

marino51

Utente Attivo
28 Feb 2013
2.931
166
63
Lombardia
non posso fare prove, ma credo di si,
(con riferimento allo screenshot che hai postato) al termine della delete metti un ";"
e fai seguire un nuovo comando sql