Visualizzazione risultati 1 fino 6 di 6

Discussione: Record eliminati dopo una data prestabilita

  1. #1
    Guest

    Predefinito Record eliminati dopo una data prestabilita

    Salve a tutti, ho un nuovo quesito da porvi, ho cercato in rete e ho trovato qualche topic che parlava del mio quesito, ma non mi hanno dato la risposta che volevo.

    Allora io ho un topic dove l'utente inserisce una data di un futuro evento, una volta pubblicato questo evento, vorrei che rimanesse in lista fino al giorno dell'evento, e che il giorno seguente si cancellasse automaticamente, o comunque che sparisse dalla lista, anche senza elminarlo dal database.

    In pratica l'utente inserisce un evento programmato per il: 12-02-2012, una volta pubblicato compare in lista, poi però il giorno 13-02-2012 vorrei che sparisse dalla lista, o meglio ancora che si eliminasse dal database.

    Il database ha oltre ai vari campi di testo ha 3 campi distinti per: giorno, mese, anno.

    Come potrei risolvere?

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,266

    Predefinito

    Per leggere i dati dal database, presumo utilizzi una query.
    Quindi: se non vuoi eliminare l'evento, potresti mettere (tramite WHERE) la condizione nella query, quindi prelevare soltanto gli eventi con la data "futura".
    Se invece vuoi eliminarli, prima di leggerli (come penso stai facendo adesso), dovresti fare una query DELETE, selezionando gli eventi "passati" (sempre con il WHERE).

    Ciao!

    EDIT:
    Invece di salvare giorno/mese/anno in campi separati, potresti salvarli secondo lo standard della NOW(), in modo che poi puoi lavorarci direttamente con le funzioni mysql per le date (leggi "SQL Date Data Types" nel link per impostare il tipo di dato).

    Oppure, tramite PHP, dal giorno/mese/anno/ora/minuti/seconti, puoi ricavare il timestamp (tramite la mktime()) e salvi quello.
    Ultima modifica di alemoppo : 10-02-2012 alle ore 17.38.00

  3. #3
    Guest

    Predefinito Query con WHERE su seconda tabella

    Ragazzi ho letto parecchie cose, tra JOIN ecc, ma non mi è chiaro le guide sono molto vaghe.

    Per spiegarmi io devo fare una query che preleva dei dati da una tabella (tab1) poi nel controllo WHERE deve confrontore la data odierna, con la data contenuta in una seconda tabella (tab2).

    Stamperò a video solo i dati della tab1, la tab2 la richiamo solo per il controllo WHERE.

    Ho provato con:

    Codice PHP:
    <?

    $data_odierna
    = date("d-m-Y");

    $query = "SELECT campo1, campo2 FROM tab1 WHERE tab2.data_db<='".$data_odierna."' ORDER BY id DESC LIMIT 5";

    ?>
    EDIT:

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Per leggere i dati dal database, presumo utilizzi una query.
    Quindi: se non vuoi eliminare l'evento, potresti mettere (tramite WHERE) la condizione nella query, quindi prelevare soltanto gli eventi con la data "futura".
    Se invece vuoi eliminarli, prima di leggerli (come penso stai facendo adesso), dovresti fare una query DELETE, selezionando gli eventi "passati" (sempre con il WHERE).

    Ciao!

    EDIT:
    Invece di salvare giorno/mese/anno in campi separati, potresti salvarli secondo lo standard della NOW(), in modo che poi puoi lavorarci direttamente con le funzioni mysql per le date (leggi "SQL Date Data Types" nel link per impostare il tipo di dato).

    Oppure, tramite PHP, dal giorno/mese/anno/ora/minuti/seconti, puoi ricavare il timestamp (tramite la mktime()) e salvi quello.
    non posso utilizzare ne NOW() ne mktime() perchè la data è scritta a mano in un campo di testo! Ho modificato il DB creando un campo unico con formato: GG-MM-AAAA.

    Quindi illuminami, se faccio solo un select nel where metto

    $data_evento<=$data_odierna

    nel delet? La stessa cosa?
    Ultima modifica di alemoppo : 10-02-2012 alle ore 18.12.54

  4. #4
    Guest

    Predefinito

    Non c'entra niente che la data sia scritta a mano. Puoi fare delle selectbox con i giorni, mesi e date, dopo di che passare i valori a mktime() e salvare il dato nel DB.

    EDIT: nella query scriverai:
    Codice:
    DELETE FROM tabella WHERE data < NOW()
    se utilizzerai il sistema suggerito pocanzi.

    Nel tuo modo non è possibile perché essendo stringhe e non numeri, non è possibile fare un confronto "numerico".

    Ultima modifica di biccheddu : 10-02-2012 alle ore 18.30.03

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    Non c'entra niente che la data sia scritta a mano. Puoi fare delle selectbox con i giorni, mesi e date, dopo di che passare i valori a mktime() e salvare il dato nel DB.

    Perfetto! Un'ultima cosa

    Devo fare un confronto tra da queste date, solo che una data è su una tabella(tab1) e l'altra è su una seconda tabella(tab2)

    ho provato con:

    Codice PHP:
    <?

    $data_odierna
    = date("d-m-Y");

    $query = "SELECT campo1, campo2 FROM tab1 WHERE tab2.data_db<='".$data_odierna."' ORDER BY id DESC LIMIT 5";

    ?>
    ma ovviamente non va, che mi consigli?

  6. #6
    Guest

    Predefinito

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    [...] Nel tuo modo non è possibile perché essendo stringhe e non numeri, non è possibile fare un confronto "numerico". [...]

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •