Ich mag diese vier Anfragen zu einem kombinieren:MySQL SELECT COUNT überlappende
SELECT COUNT(ID) FROM conversations WHERE DAY(create_time)=DAY(NOW());
SELECT COUNT(ID) FROM conversations WHERE WEEKOFYEAR(create_time)=WEEKOFYEAR(NOW());
SELECT COUNT(ID) FROM conversations WHERE MONTH(create_time)=MONTH(NOW());
SELECT COUNT(ID) FROM conversations WHERE YEAR(create_time)=YEAR(NOW());
Diese einzelnen Abfrage zu mir zurückkehren würde, zum Beispiel
Tag => Anzahl der Gespräche von heute,
Wochen => Anzahl der Gespräche ins Gespräch,
Monate => Anzahl der Gespräche ab diesem Monat,
JahrJahr => # Konversationen von diesem Jahr
Ich dachte, ich wäre da mit einigen CASE-Syntax (ich bin kein MySQL-Experte), aber realisiert, dass jeder Datensatz nur in einem Fall gezählt werden konnte, und ich brauche sie zu überlappen. Mit anderen Worten, ich könnte einen einzigen Datensatz für einen dieser Fälle, zwei, drei oder alle vier zählen lassen.
Beachten Sie, dass 'TAG (create_time) = DAY (NOW())' nicht übereinstimmen, wie Sie schreiben, Gespräche von heute, Vielmehr werden Unterhaltungen, die an einem Tag eines Monats erstellt wurden, mit dem des heutigen Datums übereinstimmen. Wenn heute der fünfte von was auch immer ist, wird diese WHERE-Klausel Unterhaltungen entsprechen, die am 5. eines beliebigen Monats eines Jahres in Ihrer Tabelle erstellt wurden. Eine ähnliche Bemerkung gilt für WEEKOFYEAR, MONTH und YEAR. – pilcrow
Das ist eine tolle Info. Gibt es MySQL-Funktionen, die ich stattdessen verwenden sollte, oder sollte ich qualifizierende && Klauseln hinzufügen? – timmyc
Tim, auf die Gefahr der Wiederholung einer Frage in Kommentaren, tun 'DATE (ct) = CURRENT_DATE', 'YEAR (ct) = YEAR (CURRENT_DATE)' und fügen qualifizierte ANDs für die anderen hinzu. * Beachten Sie, dass dies keinen Index für 'create_time' * verwendet. Effizienter, aber anstrengender ist es, die oberen und unteren Grenzen für den aktuellen Tag, die Woche, den Monat und was auch immer zu berechnen und 'WHERE create_time BETWEEN * low * AND * upper *' zu wählen. – pilcrow