kostenloser Webspace werbefrei: lima-city


Monatsberechnung

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Hallo Zusammen,

    Ich bin zur Zeit dabei meinen Statistik tag/bereich">Bereich auszubauen. Ich habe jetzt schon seit etwa 4 Monaten dafür den täglichen Besucheransturm mit meinem Counter aufgezeichnet, sodass ich die Werte für die Tage habe.

    Das sieht dann etwa so aus:
    Bild

    Diese Werte möchte ich jetzt mithilfe eines PHP Skriptes weiter verwerten, sodass ich am Ende eine Monatsübersicht habe.

    Beispielsweise:
    Das Skript berechnet alle Tage zusammen (nur die Spalte guests_counter) die in Monat Januar, Februar & März aufgezeichnet wurden, sodass ich am Ende eine Besucherzahl für den ganzen Monat habe.

    Die Daten werden jeden Tag um 0 Uhr automatisch in die Tabelle ergänzt, sodass das Skript immer die aktuelle Anzahl zeigt. Doch wie kann ich es so zusammen Basteln das immer nur der gesamte Monat zusammengerechnet wird und nicht alle Werte?


    Liebe Grüße
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. So ungefähr:
    select sum(guests_counter) from {NAME_DER_TABELLE} where date>="01.02.2015" and date<="28.02.2015"
    Ich kenne mich mit den Datumsformaten nicht so richtig aus.
    Hast du als Spaltentyp "date" eingestellt? Das ist natürlich Voraussetzung.
  4. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Hallo!

    Vielen dank für deinen Beitrag.

    Also der Spaltentyp ist VARCHAR(10) ich kann es aber jedoch problemlos auf date umändern und dann alle Punkte durch - ersetzen.

    Die Frage die sich mir bei dem Code nun stellt, wie kann ich das jetzt automatisch auf die ganze Tabelle beziehen?
    Da du das date ja konstant vorgegeben hast.

    LG
  5. Also ich würd mir das recht einfach machen und für jeden Monat eine Abfrage durchführen.
    Ich arbeite prinzipiell mit Prepared Statements, gerade jetzt wird das sinnvoll. (Ich stelle ja mehrere gleichartige Abfragen)
    // Verbindungsaufbau und Vorbereitung
    $sql=new mysqli("host","user","passwort","datenbank");
    $abfrage=$sql->prepare("select sum(guests_counter)
    from {NAME_DER_TABELLE}
    where date>=? and
    date<=?");
    $abfrage->bind_param("ss", $anfang, $ende);
    $abfrage->bind_result($zugriffe);
    
    // Eine Abfrage:
    $monat=2; // Februar
    $jahr=2015;
    $anfang=date("Y-m-d",mktime(0,0,0,$monat,1,$jahr));
    $ende=date("Y-m-d",mktime(0,0,0,$monat+1,0,$jahr));
    $abfrage->execute();
    $abfrage->fetch();
    echo $zugriffe;
    
    // Abfrage (Zeile 11 bis 16) beliebig oft wiederholen, gerne auch in einer Schleife
    
    // Und am Ende wieder aufräumen:
    $abfrage->close();
    $sql->close(); // Nur, falls du es nicht mehr brauchst
    Ungetestet und damit ohne Garantie :biggrin:

    Edit: ein Fehler schon ausgebessert.

    Beitrag zuletzt geändert: 23.3.2015 20:22:27 von fuerderer
  6. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Hallo nochmal,

    Ansich sieht es sehr gut aus, jedoch stört es mich das alles manuell eingetragen werden muss. Ich möchte es so gelöst haben das er es komplett automatisch für jeden Monat aus der Datenbank bezieht. Sonst habe ich ja in 20 Jahren 20 Funktionen die mir immer einen Monat berechnen.

    LG
  7. Dazu erstellst du dir eine Schleife.
    1. Bestimme den ersten und den letzten Monat, den du ausgeben möchtest.
    -> Den letzten Monat kann man aus der Datenbank lesen oder über das aktuelle Datum bestimmen.
    -> Den ersten Monat kann man aus der Datenbank lesen, fest ins Programm schreiben oder ein bestimmtes Intervall nach vorne legen (z.B. alles seit 6 Monaten)

    2. Lasse eine Schleife darüber laufen, die alle Monate im Bereich einmal verarbeitet. Darin passiert dann die Abfrage.

    Versuch mal, alleine da dran zu gehen. Auch wenn du noch viel Hilfe brauchst, nur durch Probieren lernt man zu programmieren.
    Wenn du keinen Plan hast, hab ich eine leichtere Aufgabe für dich:
    Lasse dir alle Zugriffszahlen innerhalb eines bestimmten Jahres ausgeben.
    Viel Erfolg :thumb:
  8. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Ich habe mir jetzt mal einen kleinen Lösungsweg überlegt, verzweifel aber an der Stelle wo ich eine Schleife brauche die immer nur für die gleichen Werte gilt.

    $abfrage = $sql->query("SELECT * FROM guests_day ORDER BY id ASC");
    $beginn = 0;
    while($row = $abfrage->fetch_array()){
    	$endedertage = substr($row['date'], -7);
    	if($endedertage == $endedertage){
    		$beginn = $beginn + $row['guests_counter'];
    	}	
    	echo $beginn . "<br>";
    	
    }


    Resultat: http://marvinkleinmusic.de/functions/stat.php

    Wenn alles richtig wäre, dann würden nur 3 Ausgaben erscheinen. Ich glaube aber ich habe irgendwo einen Logikfehler drin.

    Ich trenne erstmal alle Datumswerte auf die letzten 7 Stellen, sodass ich erhalte 01.2015,02.2015 etc.

    Was jetzt jedoch fehlt ist das mittels einer Funktion alle $endedertage zusammen gerechnet werden, die gleich enden.

    LG
  9. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Wie wäre es, wenn du das per »GROUP BY« direkt nach Monaten gruppierst und dann per »COUNT()« abzählst? Dann sparst du dir all die PHP-Pfuschereien … und wenn du das Datum als »DATE«-Feld gespeichert hättest, wär das mit dem »nach Monat«-gruppieren auch weiter kein Problem, denn dafür gibt es ja die Datum/Zeit-Funktionen.
  10. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Also das Feld lässt sich Problemlos auf DATE abändern.

    Aber mir erschließt sich die Funktion von GROUP BY nicht ganz. Wie erkennt MySQL dann das es nur alle Daten aus einem Monat benutzen soll?

    Hättest du vielleicht ein kleines Beispiel oder ein relativ einfach verständliches Tutorial dafür?

    Liebe Grüße
  11. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Also wenn ich in meiner Chatlog-Datenbank folgendes Statement ausführe bekomm ich genau das, was du bei dir machen willst, allerdings ist das bei mir DB2, das »to_char« musst du also mit »date_format« lösen:
    select count(*) as count, to_char(time, 'mm.YYYY') as time
    from chatmsg group by to_char(time, 'mm.YYYY');


    Beitrag zuletzt geändert: 27.3.2015 19:00:36 von hackyourlife
  12. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!