Raggruppa per e visualizza le voci in base alla data
Domanda
Ecco i miei dati:
id date
1 2009-01-01 10:15:23
2 2009-01-01 13:21:29
3 2009-01-02 01:03:13
4 2009-01-03 12:20:19
5 2009-01-03 13:01:06
Quello che mi piacerebbe fare è raggruppare per ogni data e quindi elencare i numeri ID sotto ogni data. Dovrei ottenere i valori di data distinti e quindi scorrere ciclicamente per ottenere le voci che rientrano nella data? è efficiente?
quindi il mio output sarebbe simile a:
2009-01-01
1
2
2009-01-02
3
2009-01-03
4
5
Soluzione
$query = "SELECT DATE(date) as mydate, id FROM your_data_table ORDER BY mydate, id";
$result = $pdo->query($query);
$oldDate = false;
while ( list($date, $id) = $result->fetch(PDO::FETCH_NUM) ) {
if ( $oldDate != $date ) {
echo "$date\n$id\n";
$oldDate = $date;
} else {
echo "$id\n";
}
}
Invece di farlo in diverse query, devi solo recuperare tutti i dati contemporaneamente. Se hai solo bisogno di alcune date, inserisci semplicemente una clausola WHERE
prima di ORDER BY
.
Altri suggerimenti
Le tue date memorizzate hanno informazioni sull'ora (il tipo di colonna è DATETIME o TIMESTAMP), per fare un gruppo per, devi estrarre solo la parte della tua fascia oraria, puoi usare funzione DATE () .
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow