2012-05-30 5 views
2

Ma question est: J'ai une table mysql: événements et j'aimerais obtenir une mise en forme spéciale json_string.Demande MYSQL | Groupe Dates par année et par mois

id event 
    1 2010-01-01 00:00:00 
    2 2010-07-02 00:00:00 
    3 2011-01-04 00:00:00 
    4 2012-01-30 00:00:00 
    5 2012-03-15 00:00:00 
... 

Je dois obtenir chaîne JSON:

{"events":[ 
    {"2010": 
     { 
     "1":{"id":1,"event":2010-01-01 00:00:00}, 
     "7":{"id":2,"event":2010-07-02 00:00:00} 
     }, 
    }, 
    {"2011: 
     { 
     "1":{"id":3,"event":2012-01-30 00:00:00} 
     }, 
    }, 
    {"2012: 
     { 
     "1":{"id":4,"event":2011-01-04 00:00:00}, 
     "3":{"id":5,"event":2012-03-15 00:00:00}, 
     }, 
    } 
]} 

Mon code ci-dessous:

$result = DB::query('SELECT id, event FROM events'); 
$events = array(); 
while($event = $result->fetch_object()) { 
    // the following statement won't get desired results 
    $events[] = $event; 
} 

return array(
    'events' => json_encode($events); 
); 

Comment puis-je changer mon code pour obtenir la chaîne JSON ci-dessus?

+0

Ce n'est pas une question. – lanzz

+0

Mise à jour pour former une question :) –

+0

@lanzz: ne pense pas que ce soit trop difficile à dire "comment faire?" à la fin du message. Si toutes les questions seraient affichées comme ça, je serais heureux. – Quassnoi

Répondre

1

Juste substr() les pièces dont vous avez besoin de la date de l'événement et l'utiliser pour construire un tableau multidimensionnel:

while($event = $result->fetch_object()) { 
    $year = substr($event->event, 0, 4); 
    $month = (int)substr($event->event, 5, 2); 

    $events[$year][$month][] = $event; 
} 
+0

Votre code retourne juste: {"events": {"2012": {"1": {"id": 1, "event": "2010-01-01 00:00:00"}}}} – user889349

+0

@ user889349 qui serait le résultat pour une seule ligne; Êtes-vous sûr que cette requête renvoie suffisamment de résultats? –

+0

Oui. Je n'ai pas de limite dans ma requête. – user889349

Questions connexes