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
durchnum
ersetzt, dasum
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 => 10in 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;