Statistik Frage
#1
Hi ich arbeite aktuell an einer Statistischen Auswertung für meine Seite. Ich stehe nun aber vor einen problem und weiß nicht wie ich dieses lösen soll.

Meine MySQL Struktur wäre...

date_m date_y count_value count_hits
8 2008 1 1

Das Wäre nur der Monat August.

Ich müsste aber einen Array füllen damit

[code=php]<?php

$monate = array("Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"); // Monate
$counter = array("","","","","","","","","","","",""); // Einmalige Werte.

?>[/code]

Es sollte so sein das wenn sagen wir mal 1,2,3,4,5,6,7,9,10,11,12 nicht vorhanden ist das diese mit einen "" gefüllt werden als Array weiß nur nicht wie.

Ich hoffe ich habe das ganze verständlich ausgeführt Wink
  Zitieren
#2
Ich hab nicht wirklich verstanden was du genau machen möchtest, und ich bin ja nun auch nicht der große Spezi in PHP, aber ich glaube das du sowas in der Art machne wolltest :

[code=php]
for($i=0;$i<=$monat;$i++Wink{
if($wert_aus_db){
$count[$i]=$wert_aus_db;
}else{
$count[$i]="";
}
}
[/code]

Aber eventuell hab ichs auch vollkommen falsch verstanden Big Grin
greetings,
Moritz

Follow me on twitter !
  Zitieren
#3
Im Endefekt hast du das schonmal gut erkannt Wink

FOR ( -> 12 )

Monat 1 DB Nicht vorhanden. "" zu Array() an Position 1

...

Montat 8 DB Vorhanden // Wertermitteln... zu Array() an Position 8.

Frage geht das überhaupt ^^ ?

Ansonsten 12x ne DB Abfrage wollte ich dafür nicht machen.

[code=php] // MySQL-Verbindung aufbauen.
$db_link = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die(mysql_error());
@mysql_select_db(MYSQL_DATABASE) or die(mysql_error());


$counter = array();
$hits = array();

for($i=1; $i<=12; $i++)
{
$sql = "SELECT * FROM netcms_stats WHERE date_y='".date("Y")."' AND date_m='".$i."';";
$res = mysql_query("$sql") or die(mysql_error());
$data = mysql_fetch_array($res);
$counter[$i] = $data["value_count"];
$hits[$i] = $data["hits"];
}

// MySQL Verbindung schließen.
mysql_close($db_link);[/code]

Geht aber leider nicht Sad

EDIT: Ach ich Held, Ich habe fehler in meiner Abfrage gehabt Sorry Big Grin ich teste mal Wink

Ein Problem besteht leider noch,

Der überspringt jetzt immer den ersten Monat. Mein Code sieht mitlerweile so aus.

[code=php] // MySQL-Verbindung aufbauen.
$db_link = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die(mysql_error());
@mysql_select_db(MYSQL_DATABASE) or die(mysql_error());


$counter = array();
$hits = array();

for($i=1; $i<=12; $i++)
{
$sql = "SELECT * FROM netcms_stats WHERE date_y='".date("Y")."' AND date_m='".$i."';";
$res = mysql_query($sql) or die(mysql_error());
$data = mysql_fetch_array($res);

if($data["count_value"] == "")
{$counter[$i] = '0';}
else
{$counter[$i] = $data["count_value"];}

if($data["count_hits"] == "")
{$hits[$i] = '0';}
else
{$hits[$i] = $data["count_hits"];}
}

// MySQL Verbindung schließen.
mysql_close($db_link);

// Testdaten
echo "<pre>";
print_r($counter);
echo "</pre>";
$monate = array("Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"); // Monate[/code]
Das print_r($counter) ergibt das:

Code:
Array
(
    [1] => 0
    [2] => 0
    [3] => 0
    [4] => 0
    [5] => 0
    [6] => 0
    [7] => 0
    [8] => 6 <---- AUGUST
    [9] => 0
    [10] => 0
    [11] => 0
    [12] => 0
)

Das landet aber bei der Ausgabe im September.

EDIT:

Habe es hinbekommen fehler war [$i] sollte nur [] sein.

[code=php]
if($data["count_value"] == "")
{$counter[$i] = '0';}
else
{$counter[$i] = $data["count_value"];}

if($data["count_hits"] == "")
{$hits[$i] = '0';}
else
{$hits[$i] = $data["count_hits"];}
[/code]
  Zitieren
#4
Also ich bin mir gerade net sicher .. hatte heute n harten Tag und bin geistig net 100% anwesend Wink

Aber ich bin der meinung man könnte deine for schleife mithilfe von
mysql_result ein wenig optimieren
einmal komplette liste hohlen und dann in die richtige reihe springen

http://de3.php.net/manual/de/function.mysql-result.php

Werd mich sonst mal morgen kurz hinsetzten ob ich den Code wie ich das gerade im Kopf hab noch zusammenbekomm
greetings,
Moritz

Follow me on twitter !
  Zitieren
#5
Hm also die Ausführzeit ist ok.
  Zitieren
#6
Na ja wenn die Performance auch so stimmt is es ja wunderbar Smile

Ich hab mich gerade mal schnell hingesetzt und das ganze an einem Kommentarcounter für News gemacht.
Was mir dabei an deinem Script aufgefallen ist, dass ich keinen blassen Schimmer habe wo der unterschied zwischen
[code=php]
$counter[$i] = $data["value_count"];
$hits[$i] = $data["hits"];
[/code]
liegt ?

Na ja auf alle Fälle wäre mein Anstz ein etwas anderer.
[code=php]
$getstats=mysql_query("SELECT test1 FROM test1 ORDER BY id LIMIT 12");
for($i=0;$i<=12;$i++){
if($stats=@mysql_result($getstats,$i)){
$count[$i]=$stats["comments"];
}else{
$count[$i]='0';
}
}
print_r($count);
[/code]
greetings,
Moritz

Follow me on twitter !
  Zitieren
#7
[Bild: webstats-month.php]

Da guck is Fix ^^
  Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 6 Gast/Gäste