Grouper par et afficher les entrées sous la date
Question
Voici mes données:
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
Ce que j'aimerais faire, c'est grouper chaque date, puis énumérer les numéros d'identification sous chaque date. Devrais-je obtenir les valeurs de date distinctes, puis les parcourir pour obtenir les entrées correspondant à la date? est-ce efficace?
afin que ma sortie ressemble à:
2009-01-01
1
2
2009-01-02
3
2009-01-03
4
5
La solution
$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";
}
}
Au lieu de le faire dans plusieurs requêtes, il vous suffit d'extraire toutes les données à la fois. Si vous avez seulement besoin de dates, il vous suffit de placer une clause WHERE
avant le ORDER BY
.
Autres conseils
Vos dates stockées ont des informations de temps (le type de colonne est DATETIME ou TIMESTAMP). Pour créer un groupe par, vous devez extraire uniquement la date qui fait partie de votre période, vous pouvez utiliser le fonction DATE () .