So wählen Sie monatsbezogene Datensätze in MySQL aus, auch wenn keine Daten vorhanden sind
So rufen Sie monatsbezogene Datensätze aus einer Benutzertabelle ab können Sie eine Abfrage wie die folgende verwenden:
SELECT COUNT(`userID`) AS total, DATE_FORMAT(`userRegistredDate`, '%b') AS MONTH, YEAR(`userRegistredDate`) AS year FROM `users` GROUP BY DATE_FORMAT(FROM_UNIXTIME(`userRegistredDate`, '%b'))
Diese Abfrage liefert Ihnen die Gesamtzahl der Benutzer sowie den Monat und das Jahr ihrer Registrierung. Es werden jedoch nur Monate mit vorhandenen Daten angezeigt.
Um Monate ohne Daten einzubeziehen, können Sie einen der folgenden Ansätze verwenden:
Methode 1 : Vereinigung der Monate
Diese Methode beinhaltet die Erstellung einer Vereinigung aller möglichen Monate im gewünschten Jahr:
SELECT COUNT(u.userID) AS total, m.month FROM ( SELECT 'Jan' AS MONTH UNION SELECT 'Feb' AS MONTH UNION SELECT 'Mar' AS MONTH UNION SELECT 'Apr' AS MONTH UNION SELECT 'May' AS MONTH UNION SELECT 'Jun' AS MONTH UNION SELECT 'Jul' AS MONTH UNION SELECT 'Aug' AS MONTH UNION SELECT 'Sep' AS MONTH UNION SELECT 'Oct' AS MONTH UNION SELECT 'Nov' AS MONTH UNION SELECT 'Dec' AS MONTH ) AS m LEFT JOIN users u ON MONTH(STR_TO_DATE(CONCAT(m.month, ' 2013'),'%M %Y')) = MONTH(u.userRegistredDate) AND YEAR(u.userRegistredDate) = '2013' GROUP BY m.month ORDER BY 1+1;
Methode 2: Vereinigung der Daten
Diese Methode erstellt eine Vereinigung von Daten für alle Monate im gewünschten Jahr:
SELECT COUNT(u.userID) AS total, DATE_FORMAT(merge_date,'%b') AS month, YEAR(m.merge_date) AS year FROM ( SELECT '2013-01-01' AS merge_date UNION SELECT '2013-02-01' AS merge_date UNION SELECT '2013-03-01' AS merge_date UNION SELECT '2013-04-01' AS merge_date UNION SELECT '2013-05-01' AS merge_date UNION SELECT '2013-06-01' AS merge_date UNION SELECT '2013-07-01' AS merge_date UNION SELECT '2013-08-01' AS merge_date UNION SELECT '2013-09-01' AS merge_date UNION SELECT '2013-10-01' AS merge_date UNION SELECT '2013-11-01' AS merge_date UNION SELECT '2013-12-01' AS merge_date ) AS m LEFT JOIN users u ON MONTH(m.merge_date) = MONTH(u.userRegistredDate) AND YEAR(m.merge_date) = YEAR(u.userRegistredDate) GROUP BY m.merge_date ORDER BY 1+1;
Beide Vereinigungsmethoden erstellen Platzhalter für alle Monate, sodass Sie Datensätze auch dann anzeigen können, wenn keine Daten vorhanden sind . Die Wahl zwischen den beiden Methoden hängt von Ihren spezifischen Anforderungen ab.
Das obige ist der detaillierte Inhalt vonWie kann ich in MySQL monatliche Datensätze abrufen, auch wenn für bestimmte Monate keine Daten vorhanden sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!