• User Newbie

    [MySql] ordinamento elemento per data minore

    Buongiorno a tutti,

    non riesco a ordinare degli elementi in base alla data minore in esso contenuta, ovvero:
    Ho dei sottoeventi che possono contenere una o più date, vorrei ordinare i sottoeventi partendo usando come riferimento la data minore e così via es.:

    sottoevento 1
    08-01-2011
    09-01-2011
    10-01-2011

    sottoevento 2
    09-01-2011
    10-012011

    sottoevento 3
    12-01-2011
    13-01-2011
    14-01-2011

    ecc,ecc, sapreste darmi una mano?

    Grazie
    SK


  • ModSenior

    Order by campo_data?
    Non funziona?


  • User Newbie

    No, sarebbe troppo facile 😢

    In pratica estraggo tutti i dati che mi servono per essere mostrati a video, vengono elencati tutti i sottoeventi appartenenti al tal evento, ogni sottoevento contiene delle date, che vengono correttamente ordinate in ordine cronologico, ma i sottoeventi non vengono ordinati partendo da quello che ha la data più vecchia a salire.


  • User Attivo

    [QUOTE=Seriarkiller;845742]No, sarebbe troppo facile 😢

    Ti consiglio di aggiungere un nuovo campo alla tabella in cui scrivere l'MKTIME della data che ti serve. Così facendo il lavoro risulterà più facile, di molto.


  • User Attivo

    Ciao Seriarkiller,
    probabilmente stai salvando la data come stringa e non come data.
    Per far funzionare l'ordinamento hai due possibili soluzioni:

    • Modificare il campo nel database, cambiando il tipo di valore in datetime
    • Modificare il campo nel database, cambiando il tipo di valore in timestamp

    Il timestamp è un dato comodissimo per molti motivi. E' un numero intero che corrisponde al numero di secondi passati dalla mezzanotte del primo gennaio 1970, pertanto è un numero e può essere ordinato come tale. E' anche possibile fare rapidamente calcoli di ore/giorni successivi/precedenti, è facile immaginare perché...

    Per lavorare con i timestamp esistono già moltissime funzioni php, tra le quali ti segnalo soprattutto:
    [php]echo time();
    //Scrive il timestamp della data e ora attuali.

    echo date("d-m-Y",time());
    //Scrive la data in formato gg-mm-aaaa, prende come input il formato e un timestamp a piacere (in questo caso data e ora attuali)

    echo mktime (11, 24, 0, 2, 7, 2011);
    //Scrive il timestamp del 7-2-2011 alle 11:24:00
    [/php]Ci sono poi altre funzioni utili, ma queste tre già fanno il 99% del lavoro.

    Ciao,
    Luca Bartoli


  • User Newbie

    Il campo è in formato DATE


  • User Attivo

    Allora stai salvando le date in un formato che non è il "date" di mysql.
    Mysql si aspetta una data in formato aaaa-mm-gg, perciò ordina da sinistra a destra.
    Prima di salvare le date fai qualcosa del genere:
    [php]$data=array();
    $data[]='07'; //giorno
    $data[]='02'; //mese
    $data[]='2011'; //anno

    $sqldate=implode('-',array_reverse($data));[/php]
    Quando le date saranno in formato corretto potrai ordinare il risultato della query con

    ORDER BY campo_sottoevento ASC, campo_data ASC
    

    Ciao,
    Luca Bartoli


  • User Newbie

    Le date sono salvate nel formato date corretto 2011-01-07