Benötige Denkanstoß für Statistikauswertung

Funky_MF

Erfahrenes Mitglied
Hallo,

ich habe auf einer Website ein Suchfunktion implementiert, bei der mit jeder Eingabe eines Suchbegriffs ein eigener Datensatz mit dem Zeitstempel u. dem Suchbegriff in eine MySql-Db geschrieben wird.

Jetzt möchte ich gern eine Auswertung erstellen, in der ich z.B. für einen bestimmten Zeitraum alle Suchbegriffe anzeigen lassen kann, mit einer Art Top-Ten Liste.
Z.B.: Im Monat Januar wurde nach dem Begriff xy 10mal gesucht, nach dem Begriff zyx 5mal, usw..

Kann mir jemand da einen Denkanstoß geben, wie ich das am Besten angehen kann ?
 
Hallo,

ich würde einfach das SQL-Statement so schreiben, dass mir nur die jeweiligen Datensätze zurückgeliefert werden.
Wenn du z.B. den Monat (als einfaches Beispiel) als Parameter über die URL erhältst, würde ich mein Statement einfach so abändern, dass im WHERE Part das Datum anhand dieses Parameters ausgelesen wird. Ich weiss jetzt nicht, wie dein Timestamp gespeichert wird. Wird er mit dem Monatsnamen gespeichert, könnte dein SQL in etwa so lauten:
PHP:
$sql = "SELECT * FROM such_tabelle WHERE timestamp LIKE ".$_GET['monat'];

Ich hoffe, ich hab dich überhaupt richtig verstanden ;)
Vielleicht hilft dir das ja... und ich hoffe, ich hab keinen Stuss geschrieben :p

Gruß... und viel Glück
 
Danke für deine Hilfe, leider hilft mir das nicht weiter.
Wie ich ein SELECT-Abfrage für einen bestimmten Monat gestalte, weiß ich, was mir fehlt ist die Auflistung der Suchergebnisse in der Reihenfolge der Häufigkeit.

Hier mal ein Beispiel zur besseren Verständlichkeit:
Code:
Inhalt der Tabelle:

id | begriff | timestamp 
=======================
0  | apfel   |  2005-12-19    
1  | birne   |  2005-12-19   
2  | apfel   |  2005-12-24    
3  | banane  |  2005-12-27    
4  | apfel   |  2005-12-27    
5  | banane  |  2005-12-27   
6  | apfel   |  2005-12-30    
7  | zwiebel |  2005-12-31

Ausgabe soll ungefähr so erfolgen:
Code:
Die häufigsten Suchbegriffe im Monat Dezember:

1. )  Apfel - 4x
2. )  Banane - 2x
3. )  Birne - 1x
4. )  Zwiebel - 1x
 
Zuletzt bearbeitet:
sowas hab ich kürzlich für einen Banner Counter umgesetzt , und zwar hab ich einfach alle Zeiträume aus der Datenbank abgefragt.

PHP:
$timestart = date("Ymd" , mktime(0,0,0,date("n)-1,1,2006);
$timeend = date("Ymd" , mktime(0,0,0,date("n") , date("d") , date("Y") );

$query = "SELECT * FROM tabelle WHERE DATEFORMAT(timestamp,'%Y%m%d') < $timeend AND DATEFORMAT(timestamp, '%Y%m%d') > $timestart"  ;

$ergeb = mysql_query($query);
Nun sollte es ein leichtes sein die Array zu durchlaufen , wir nehmen uns den ersten Wert des Arrays (das Suchwort) legen diesen in einen anderen Array ab welches die Wörter aufnimmt die bereits gezählt wurden , und suchen nach dem gleichen Wert und wenn gefunden erhöhen wir den Counter.
 
Zuletzt bearbeitet:
@JaguarGorgone: Genau das hatte ich mit Denkanstoß gemeint :) - Danke !

Habe es jetzt so gelöst:

PHP:
// Auslesen der Datensätze:
$dest = my_query("SELECT * FROM searchlog WHERE timestamp BETWEEN '".$date_min."  00:00:00' AND '".$date_max." 23:59:59'");
while ($stat = mysql_fetch_array ($dest,MYSQL_ASSOC)) {
    // in Array schreiben:
    $Arr_stat[] = $stat['search']; 
}
//Werte zählen:
$count_stat = array_count_values($Arr_stat);

//Array sortieren
arsort($count_stat);

//Array auslesen und formatiert ausgeben:
echo "<table>";
$n = 1;
foreach ($count_stat as $k => $v){
    echo "<tr><td>".$n.".</td><td>&nbsp;&nbsp;".$k."</td><td>&nbsp;&nbsp;".$v."x</td></tr>\n";
    $n++;
}
echo "</table>";

Danke für die Hilfe !
 
Zurück