- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- [MySql] ordinamento elemento per data minore
-
[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-2011sottoevento 2
09-01-2011
10-012011sottoevento 3
12-01-2011
13-01-2011
14-01-2011ecc,ecc, sapreste darmi una mano?
Grazie
SK
-
Order by campo_data?
Non funziona?
-
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.
-
[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.
-
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
-
Il campo è in formato DATE
-
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 conORDER BY campo_sottoevento ASC, campo_data ASC
Ciao,
Luca Bartoli
-
Le date sono salvate nel formato date corretto 2011-01-07