• User Newbie

    Query php/mysql con selezione date

    Salve,
    premetto che non so praticamente nulla di php, ma mi tocca cavarmela da solo nella programmazione dei miei siti.
    Sto tentando di estrarre dati da una tabella di db mysql con php. non riesco però a fare questo sospirato improvement: vorrei estrarre dati solo con "date" da oggi in poi su una pagina, e su un'altra (quindi con una query differente) vorrei solo i dati "passati" (da ieri in poi).

    Le stringhe mal funzionanti sono queste:

    1. da oggi in poi:

    $oggi = date("Y-m-d");
    $query = "SELECT * FROM tourdates WHERE date <= ".$oggi." ORDER BY date DESC";

    non funziona proprio.

    1. fino a ieri:

    $query = "SELECT * FROM tourdates ORDER BY date DESC";

    funziona ma non esclude le date future.
    Aggiungo che io capisco i significati di queste stringhe a livello logico, ma non le ho scritte io. Non ne sarei davvero in grado.

    Spero possiate aiutarmi, grazie.

    • Paolo

  • User Attivo

    Infatti così non funziona, perché 14-08-2008 non è un numero ma una stringa e quindi non può essere confrontato con > e <.

    Ti consiglio di trasformare quelle date in secondi passati dalla Unix Epoch (1-1-1970, ore 1:00:00) con time() e mktime() di php 😉

    :gthi:


  • User Newbie

    Grazie Jeeves.
    Io però, ripeto, non so nulla di php. La tabella riguarda concerti musicali, per cui importa solo la data. Se per caso puoi suggerirmi pagine php da cui posso prendere e adattare le stringhe, questo mi aiuterebbe di più. Per imparare a utilizzare quelle funzioni dovrei iniziare a studiare seriamente il php (e il tempo davvero mi manca). Spero tu (o qualcun altro) possa aiutarmi.


  • User Newbie

    Jeeves, penso di aver risolto (se vi può far piacere ho comprato un'o'reilly per la programmazione in php/mysql... che mi ha dato una sufficiente infarinatura per proseguire la ricerca su altri forum).

    La risposta, per dovere di cronaca, è la seguente:

    mostra solo i concerti prossimi:

    $query = "SELECT * FROM tourdates WHERE date >= (CURdate()) ORDER BY date DESC";

    mostra solo i concerti passati:

    sostituire >= con <

    Mi sembra molto semplice, lo capisco anch'io! 😉
    Ciao a tutti,

    • P

  • User Newbie

    Salve a tutti di nuovo.
    Improvvisamente (è probabile che la cosa sia successa con il passaggio di date da future a passate) mi è comparsa la seguente dicitura di errore:

    Warning: date() expects at least 1 parameter, 0 given in D:\Inetpub\webs\blakeeeecom\querys\blake3etour_old.php on line **15

    **Non sono riuscito a capire di cosa si tratta girovagando per forum. Qualcuno ne ha un'idea?

    Riepilogo il codice:

    $oggi = date();
    $query = "SELECT * FROM tourdates WHERE date < (CURdate()) ORDER BY date DESC";

    Grazie a tutti in anticipo.


  • User Attivo

    Ti consiglio di mettere un altro campo, nel database, per inserire il valore mktime della data. Così è il metodo più sicuro per il confronto numerico delle date.


  • User Newbie

    Grazie per l'indirizzamento al database.
    Non capendone una cippa non è che potresti molto a grandi linee spiegarmi meglio di che tipo di campo ci sarebbe bisogno, e a cosa servirebbe? E con le stringhe della query che ho postato sarebbe già estratto correttamente dopo l'immissione di tale campo?
    Ti ringrazio e scusa l'ignoranza. Mi trovo a fare ste cose da solo non sapendo molto di linguaggi di programmazione.


  • User Attivo

    Per prima chiariamo cosè l'mktime ossiaè il timestamp ovvero il numero di secondi trascorsi dal 1 gennaio 1970 00:00:00 (la cosiddetta Unix Epoch) all'istante specificato.
    Quindi questo valore numerico verrà inserito nel nuovo campo, che ti ho detto di creare, del database. Così facendo il confronto dei dati è di tipo numerico riferito ad una data, maggiore, minore o uguale.

    Es.: mktime
    Poniamo che il valore della data specificata arrivi tramite POST o GET da un form, quindi:
    $DATA = $_POST['data']; // ES: 01-01-2009
    $ANNO = $DATA[0].$DATA[1].$DATA[2].$DATA[3]; // ANNO DELLA DATA
    $MESE = $DATA[5].$DATA[6]; // MESE DELLA DATA
    $GIORNO = $DATA[9].$DATA[8]; // GIORNO DELLA DATA
    $ORA = date("H"); // ORA ATTUALE
    $MIN = date("i"); // MINUTI ATTUALI
    $SEC = date("s"); // SECONDI ATTUALI

    $MKDATA = mktime($ORA,$MIN,$SEC,$MESE,$GIORNO,$ANNO); // VALORE MKTIME

    SE SONO STATO CHIARO NON TI RESTA CHE PROVARE CIO' CHE HO INDICATO, ALTRIMENTI CHIEDIMI ALTRE SPIEGAZIONI IN MERITO.

    CIAO


  • User Newbie

    Ciao Mikslap,
    grazie tante per la spiegazione dettagliata. Sono sicuro che se ne capissi un minimo di più la troverei chiarissima. Purtroppo sono a digiuno di troppe cose per riuscire a utilizzare il tutto così com' è.
    In particolare come faccio io a inserire un timestamp in un campo di database? Non penso di sapere neanche che tipo di campo dovrei aprire.
    Il form che mi hai scritto di esempio: sarebbe quello che automaticamente "scriverebbe" la data aggiornata nel campo della tabella? E se sì, come può il procedimento essere automatizzato? Nel senso, immagino che ogni volta che inserisco un concerto, devo inserire la data dello stesso. Invece il timestamp dovrebbe essere ricuperato via qualcosa di esterno automatizzato, no?
    Scusa se parlo in maniera poco tecnica. Ripeto, non so praticamente nulla di questi linguaggi.
    Grazie ancora.