Wie würden Sie bei einer Tabelle mit einem Zeitstempel in jeder Zeile die Abfrage so formatieren, dass sie in dieses bestimmte JSON-Objektformat passt?
Ich versuche, ein JSON-Objekt in Jahre / Monate zu organisieren.
json, um die Abfrage zu begründen:
{
"2009":["August","July","September"],
"2010":["January", "February", "October"]
}
Hier ist die Frage, die ich bisher habe -
SELECT
MONTHNAME(t.summaryDateTime) as month, YEAR(t.summaryDateTime) as year
FROM
trading_summary t
GROUP BY MONTH(t.summaryDateTime) DESC";
Die Abfrage bricht zusammen, weil sie (vorhersehbar) die verschiedenen Jahre zusammenfasst.
DATE_FORMAT(t.summaryDateTime, '%Y-%m')
DATE_FORMAT( FROM_UNIXTIME(t.summaryDateTime), '%Y-%m' )
GROUP BY YEAR(date), MONTH(date) DESC;
(~ 450 ms) undGROUP BY DATE_FORMAT(date,'%Y-%m')
(~ 850 ms) an einer InnoDB-Tabelle mit> 300.000 Einträgen ergab, dass Ersteres (die markierte Antwort auf diese Frage) ~ die Hälfte der Zeit in Anspruch nahm.quelle
Sollte DESC sowohl für JAHR als auch für Monat verwenden, um die richtige Reihenfolge zu erhalten.
quelle
ich bevorzuge
quelle
Ich weiß, dass dies eine alte Frage ist, aber Folgendes sollte funktionieren, wenn Sie den Monatsnamen auf DB-Ebene nicht benötigen:
Siehe EXTRACT-Funktionsdokumente
Sie werden wahrscheinlich feststellen, dass dies eine bessere Leistung aufweist. Wenn Sie ein JSON-Objekt in der Anwendungsschicht erstellen, können Sie die Formatierung / Reihenfolge vornehmen, während Sie die Ergebnisse durchgehen.
NB Ich wusste nicht, dass Sie DESC zu einer GROUP BY-Klausel in MySQL hinzufügen können. Vielleicht fehlt Ihnen eine ORDER BY-Klausel:
quelle
EXTRACT(YEAR_MONTH FROM summaryDateTime)
ist201901
Sie müssen so etwas tun
quelle
Sie können dies auch tun
nach Jahr und Monat zu bestellen. Nehmen wir an, Sie möchten ab diesem Jahr und diesem Monat bis zu 12 Monaten bestellen
quelle
Verwenden Sie die EXTRACT-Funktion wie folgt
quelle
Sie gruppieren nur nach Monat, Sie müssen YEAR () zur Gruppe nach hinzufügen
quelle
Trotzdem müssten Sie es in einem externen Skript verarbeiten, um genau die Struktur zu erhalten, nach der Sie suchen.
Verwenden Sie beispielsweise die Explosion von PHP, um ein Array aus der Liste der Monatsnamen zu erstellen, und verwenden Sie dann json_encode ()
quelle
So mache ich es:
quelle
Verwenden
Anstatt
quelle