MySQL Statistik



  • $date = new DateTime();
    
    			//Verhindere, dass der aktuelle Tag angezeigt wird
    			$date->modify("-" . ($Period + 1) . " day");
    
    			for ($i = 0; $i <= $Period; $i++) {
    				$temp_date = $date->format('Y-m-d');
    				$Sql = mysql_query("SELECT COUNT(id) AS sum 
    									FROM table 
    										WHERE created_at LIKE '$temp_date %' 
    										AND w_id = $this->Wid") or die(mysql_error());
    
    				$temp_date = $date->format('d.m');
    				while($Row = mysql_fetch_array($Sql))
    					$temp_data[] = array("date" => $date->format('Y-m-d'), "data" => $Row[0]);
    
    			    $date->modify('+1 day');
    			}
    			return $temp_data;
    

    Wie man sieht führe ich eine sql anfrage 30 mal durch, um die anzahl an beiträgen über einen monat zu erhalten = statistik die mit javascript in ein chart konvertiert wird.

    weiß einer wie ich diese 30 anfragen in EINE bekomme?

    danke 🙂



  • $a = $date->format('Y-m-d')." 00:00:00";
    $date->modify("+30 days");
    $b = $date->format('Y-m-d')." 00:00:00";
    
    mysql_query("SELECT COUNT(id) AS num FROM table WHERE created_at BETWEEN '".$a."' AND '".$b."'");
    

    sum durch num ersetzt, da sum ein reservierter Bezeichner ist.
    Btw: MySQLi / PDO mit Prepared Statements nehmen.



  • zeigt deine Lösung die Anzahl der Einträge pro Tag?

    Hab ich leider vergessen zu erwähnen... ich brauch die Anzahl die an dem bestimmten Tag gepostet wurden... also

    14.5 => 2
    15.5 => 0
    16.5 => 10

    in der form



  • deswegen auch das "temp_date %"

    weil created_at ein DATETIME ist



  • Also SQL-mässig könnte das so ähnlich aussehen

    SELECT CAST(created_at AS DATE) AS Tag, COUNT(*) AS Anzahl 
    FROM table 
    WHERE created_at BETWEEN blah AND blubb
    AND ...
    GROUP BY CAST(created_at AS DATE)
    ORDER BY CAST(created_at AS DATE)
    

    Wobei ich nie was mit MySQL mache. Mag sein dass man es ein wenig anpassen muss.



  • ist meine denke eig korrekt? wenn man ec2 instanzen hat die auf eine RDS datenbank zugreifen sollte man die meiste rechenpower doch auf die datenbank legen oder?



  • weiß ja nicht ob das hilft aber hier die etwas zu komplexe lösung^^

    $Now = new DateTime();
    			$NowFormat = $Now->format('Y-m-d');
    
    			//Verhindere, dass der aktuelle Tag angezeigt wird
    			$Span = $Now->modify("-" . ($Period + 1) . " day");
    			$SpanFormat = $Span->format('Y-m-d');
    
    			$Sql = mysql_query("SELECT CAST(created_at AS DATE) AS Tag, COUNT(*) AS Anzahl 
    								FROM abc 
    								WHERE created_at BETWEEN '$SpanFormat %' AND '$NowFormat %' 
    									AND w_id = $this->Wid
    									GROUP BY CAST(created_at AS DATE) 
    									ORDER BY CAST(created_at AS DATE)") or die(mysql_error());
    
    			while($Row = mysql_fetch_array($Sql))
    				$temp_data[] = array(
    					"date" => $Row["Tag"], 
    					"data" => $Row["Anzahl"]
    				);
    
    			for ($i = 0; $i <= $Period; $i++) {
    				//Wenn der 1. Tag der Zeitspann nicht im Array ist, füge hinzu mit Wert 0
    				if($temp_data[$i]["date"] != $Span->format('Y-m-d'))
    					array_insert($temp_data, array(
    						"date" => $Span->format('Y-m-d'), 
    						"data" => 0
    					), $i);
    				$Span->modify('+1 day');
    			}
    			return $temp_data;
    

Anmelden zum Antworten