2009-03-08 7 views
1

Voici mes données:Groupe et par l'affichage des entrées en date

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 je voudrais faire est un groupe chaque jour et la liste alors les numéros d'identification ci-dessous chaque date. Dois-je obtenir les valeurs de date distinctes, puis les parcourir pour obtenir les entrées qui correspondent à la date? Est-ce efficace?

donc ma sortie ressemblerait à ceci:

2009-01-01 
1 
2 
2009-01-02 
3 
2009-01-03 
4 
5 

Répondre

3
$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'aller chercher toutes les données à la fois. Si vous avez seulement besoin de dates, vous devez simplement mettre une clause WHERE avant la ORDER BY.

2

Vos dates stockées ont des informations de temps (le type de la colonne est DATETIME ou TIMESTAMP), afin de faire un groupe par, vous devez extraire seulement date partie de votre timespan, vous pouvez utiliser la fonction DATE().

+0

Bon, et c'est bon. Disons simplement que je tire les dates distinctes. Est-ce que je fais cela en tant que requête séparée? Puis parcourir les résultats et exécuter une autre requête pour obtenir toutes les entrées qui correspondent à la date? Juste ne semble pas trop efficace ... –

+0

non, vous faites juste une requête et en éliminant la partie 'temps' de cette colonne. – Alnitak