Étant donné une table avec un horodatage sur chaque ligne, comment formeriez-vous la requête pour qu'elle tienne dans ce format d'objet json spécifique.
J'essaye d'organiser un objet json en années / mois.
json pour baser la requête:
{
"2009":["August","July","September"],
"2010":["January", "February", "October"]
}
Voici la requête que j'ai jusqu'à présent -
SELECT
MONTHNAME(t.summaryDateTime) as month, YEAR(t.summaryDateTime) as year
FROM
trading_summary t
GROUP BY MONTH(t.summaryDateTime) DESC";
La requête s'effondre car elle regroupe (de manière prévisible) les différentes années.
DATE_FORMAT(t.summaryDateTime, '%Y-%m')
DATE_FORMAT( FROM_UNIXTIME(t.summaryDateTime), '%Y-%m' )
GROUP BY YEAR(date), MONTH(date) DESC;
(~ 450 ms) etGROUP BY DATE_FORMAT(date,'%Y-%m')
(~ 850 ms) sur une table InnoDB avec plus de 300 000 entrées a montré que la première (la réponse marquée à cette question) a pris environ la moitié du temps que la seconde.la source
je préfère
la source
Doit utiliser DESC pour l'année et le mois pour obtenir un ordre correct.
la source
Je sais que c'est une vieille question, mais la suivante devrait fonctionner si vous n'avez pas besoin du nom du mois au niveau de la base de données:
Voir la documentation de la fonction EXTRACT
Vous trouverez probablement que cela est plus performant .. et si vous construisez un objet JSON dans la couche d'application, vous pouvez effectuer le formatage / classement au fur et à mesure que vous parcourez les résultats.
NB Je ne savais pas que vous pouviez ajouter DESC à une clause GROUP BY dans MySQL, il vous manque peut-être une clause ORDER BY:
la source
EXTRACT(YEAR_MONTH FROM summaryDateTime)
est201901
Tu dois faire quelque chose comme ça
la source
Tu vas aussi faire ça
à commander par année et par mois. Disons que vous souhaitez commander à partir de cette année et ce mois-ci jusqu'à 12 mois
la source
utilisez la fonction EXTRACT comme ceci
la source
Voici comment je fais:
la source
Vous regroupez par mois uniquement, vous devez ajouter YEAR () au groupe par
la source
Vous devrez néanmoins le traiter dans un script externe pour obtenir exactement la structure que vous recherchez.
Par exemple, utilisez l'explosion de PHP pour créer un tableau à partir de la liste des noms de mois, puis utilisez json_encode ()
la source
Utilisation
Au lieu de
la source