Ich habe eine Tabelle mit Daten, die jede Minute aufgezeichnet werden, also habe ich für jede Minute eine Zeile. Wenn die Daten zur Verarbeitung zurückgegeben werden, ist diese Genauigkeit für die letzten 6 Stunden erforderlich, aber danach ist ein niedrigeres Maß an Genauigkeit ausreichend, z. alle 5 Minuten.
Ich kann alle Daten in ein Array zurückgeben und dann alle bis auf jedes fünfte Element entfernen, aber das erfordert, dass alle Daten von MySQL zurückgegeben und dann zuerst in das Array eingelesen werden - ziemlich viele Daten.
Wie kann ich jede n-te Zeile in MySQL zurückgeben? Ich habe diesen Blogpost gelesen, der die Verwendung von primaryKey% 5 = 0 vorschlägt wo primaryKey ist auto_increment aber das
a) verwendet keine Indizes b) gibt nur primaryKey-Werte zurück, die durch 5 teilbar sind und im Falle von Löschungen möglicherweise nicht jede fünfte Zeile sind
Kann dies nur innerhalb der SQL-Abfrage durchgeführt werden, oder wird es erforderlich sein, Zeile für Zeile die Ergebnismenge mithilfe von Cursorn zu durchlaufen?
Ich verwende MySQLi in PHP, um eine Verbindung zur Datenbank herzustellen.
Die Liste der Zeitstempel alle 5 Minuten:
%Vor% Sie können dies jetzt als Unterauswahl verwenden, um die angeforderten Protokolleinträge abzurufen, indem Sie logtimestamps
mit first_of_five_minutes
auf der Verknüpfung verknüpfen. Natürlich müssen zusätzliche WHERE
-Klausen innerhalb und außerhalb repliziert werden, damit Sie die "richtigen" Zeitstempel erhalten.
Beachten Sie auch, dass dies den ersten Zeitstempel in jedem fünfminütigen Intervall zurückgibt, während Lösungen, die direkt minutes%5 = 0
verwenden, nur Ogentries zurückgeben, die tatsächlich ein Vielfaches von: 05 sind, was fehlschlagen kann, wenn Sie Verzögerungen bei der Aufzeichnung von Protokollen oder Ähnlichem haben .