Most Wanted Begriffe angeben

dennis-sauer

Erfahrenes Mitglied
Hallo zusammen,

ich versuche gerade folgendes zu realisieren - finde nur keinen richtigen Begriff nach welchem ich suchen kann.

Ich hab eine Datenbank mit mehreren Tabellen und auf meiner Seite verschiedene Rubriken. Nun sucht jemand in der Rubrik Hotels nach einem Hotel.

Gibt es eine Möglichkeit unter dem Suchfeld ne kleine Tabelle anzeigen zu lassen in welcher die am häufigsten gesuchten Begriffe angezeigt werden? Vielleicht auch mit einem kleinen Link, sodass direkt dieser Eintrag geöffnet werden kann?

Grüße und Dank

Dennis
 
Ich hatte mal so eine ähnliche Geschichte.
Lösen konnte ich das ganze mit JavaScript/AJAX.

Du holst dir quasi per Request die Top-Ergebnisse aus deiner Datenbank und füllst diese per Javascript in ein Div, welches du dann absolut diret und schön unter dein Eingabefeld positionierst.

Ich hoffe, dass das das ist, was du suchst
 
Naja, du musst halt bei jeder Suche deinen Such-String auswerten und in eine extra Tabelle in der Datenbank ablegen.
In dieser Datenbank stehen dann alle gesuchten Suchbegriffe.

Ob du nun den ganzen String als ein Ganzes abspeicherst oder den String in seine einzelnen Worte abspeicherst und diese dann ablegst, sei ganz dir überlassen.

Die eine Möglichkeit wäre, zu schauen, ob ein Suchbegriff schon in der Tabelle liegt und wenn nicht, diesen anzulegen.
Sollte er doch schon vorhanden sein, kannst du dann einfach mit einem UPDATE ein Zählfeld +1 setzen.
also:
Code:
UPDATE topsuchworte SET suchcounter = suchcounter + 1 WHERE suchwort = 'hotell'
um es mal als Beispiel zu haben.

Eine andere Möglichkeit wäre, jedes Mal ein wirkliches INSERT in diese Tabelle abzusetzen. Dabei kannst du dann auch das Datum mit abspeichern, was es dir ermöglicht, nur die Top-Suchworte der letzten 30 Tage z.B. auszulesen.
Das Statement dazu könnte dann wie folgt aussehen:

Code:
SELECT COUNT(*) AS c, firstAlias FROM topsuchworte GROUP BY suchwort ORDER BY c DESC LIMIT 0, 20

Das gibt dir dann die Top 20 Suchworte aus!
Natürlich ist hierbei zu beachten, dass deine Tabelle irgendwann ziemlich groß werden kann und deine Abfrage sehr langsam werden kann.
 
Hallo,

ok die DB wird extrem viel genutzt (wenn sie dann mal fertig ist) d.h. ich würde Variante 1 präferieren.

Hatte gerade sowas gefunden:

PHP:
SELECT
suchbegriff-Spalte,
COUNT(suchbegriff-Spalte) AS anzahl_suchbegriffe
FROM tabelle
GROUP BY suchbegriff-Spalte
ORDER BY anzahl_suchbegriffe DESC
LIMIT 5
";

Dann danke ich dir erstmal und setz mich mal dran...

Gruß
 
Hallo,

ich hab irgendwie noch ein großes Problem und komm nicht weiter...

Ich möchte gerne eine Überschrift machen und dann darunter die 5 Begriffe anzeigen lassen.

Ich mach dann eine Tabelle in PHP und irgendwie klappt die Anzeige so gar nicht. Im Moment hab ich folgendes:

PHP:
$result = mysql_query("SELECT name, COUNT(name) AS counter FROM $categorie ORDER BY counter DESC LIMIT 5");
if (mysql_errno()) die ("MySQL-Error: " . mysql_error());
while($row = mysql_fetch_assoc($result))
{
}

Ich habs bisher nur hinbekommen, das die Überschriftenspalte über jedem Eintrag steht - also 5 mal... :confused:

Grüße

Dennis
 
Hallo zusammen,

hatte das weggelassen aus der while-Schleife, dachte der Fehler liegt nur am oberen Teil.

Habs jetzt hinbekommen, hatte auch einen kleinen Fehler in der SELECT Anweisung.

Wer sowas nochmal benötigt:

PHP:
$result = mysql_query("SELECT * FROM $categorie ORDER BY counter DESC LIMIT 5");
if (mysql_errno()) die ("MySQL-Error: " . mysql_error());

while($row = mysql_fetch_assoc($result))
{
echo "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">";
echo "<tr>";
echo "<td>".$row['name']."</td>";
echo "</tr>";
echo "</table>";                        
}

Und die Überschriften hab ich dann jetzt über die while-Schleife gepackt. Eins bleibt aber noch offen: Wie kann die 5 Einträge nun nummerieren? Wenn ich das so machen würde:

PHP:
echo "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">";
echo "<tr>";
echo "<td>1.</td>";
echo "<td>".$row['name']."</td>";
echo "</tr>";
echo "</table>";

Dann würde ja immer eine 1 da stehen. Hab ich ne andere Chance?

Grüße

Dennis
 
Was hälst du von folgender Variante?

PHP:
$result = mysql_query("SELECT * FROM $categorie ORDER BY counter DESC LIMIT 5");
if (mysql_errno()) die ("MySQL-Error: " . mysql_error());

$counter = 0;

while($row = mysql_fetch_assoc($result))
{
$counter++;
echo "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">";
echo "<tr>";
echo "<td>".$counter.".</td>";
echo "<td>".$row['name']."</td>";
echo "</tr>";
echo "</table>";                        
}
?
 
Zurück