Popular Keywords anzeigen

Sasser

Erfahrenes Mitglied
Guten Tag!

Ich speichere Suchwörter in einer Datenbank ab. Ich´habe schon öfters gesehen, dass die beliebtesten Keywords verschieden angeordnet und in verschiedenen Größen (je öfters diese in der Datenbank sind) dargestellt sind. Gibt es dafür Beispielscripte oder hat jemand eine Idee, wie man das umsetzen kann?

Mein Anfang:

PHP:
$keywordresult = mysql_query ( "Select `keyword` FROM keywords GROUP BY `keyword` LIMIT 10" );
while ( $keyword = mysql_fetch_assoc ( $keywordresult ) ) {
	echo $keyword [keyword] . "<br>";
}


So werden diese allerings nur langweilig in einer Liste ausgegeben...
 
Hi,

meinst Du Tag Clouds? Dabei handelt es sich meines Wissens eher um eine Art gewichtete Verschlagwortung der Website.

Wenn Du die am häufigsten eingegebenen Suchbegriffe so darstellen willst, wo ist denn dann die Schwierigkeit, einfach noch ein COUNT(`keyword`) in die Abfrage mit einzubauen?
Ich würde allerdings die Begriffe nicht mehrfach speichern, sondern eine zusätzliche Spalte "zaehler" oder so benutzen...

LG
 
Das ist natürlich kein Problem, das einzubauen. Nur habe ich bisher als Fontgröße einfach die Anzahl genommen und das würde irgendwann das Design sprengen.

Die Formel ist verständlich, allerdings was soll bei:

tmin: minimale Anzahl
tmax: maximale Anzahl

Also ich will maximal nur 20 Schlagwörter ausgeben. Aber was ist minimal?
 
Irgendwie verstehe ich nur Bahnhof!?

Also mein Script sieht nun so aus:

PHP:
$keywordresult = mysql_query ( "Select `keyword`, COUNT(`keyword`) AS relevance FROM keywords GROUP BY `keyword` ORDER BY RAND() LIMIT 20" );
while ( $keyword = mysql_fetch_assoc ( $keywordresult ) ) {
	echo "<a href='index.php?action=search&keywords=" . $keyword [keyword] . "&search_x=true&search_y=true' style='text-decoration:none;font-size:";
	$max = 20;
	$min = 1;
	if ($keyword [relevance] > $min) {
		echo ( 18 * ( $keyword [relevance] - $min ) ) / ( $max - $min );
	} else {
		echo 1;
	}
	echo "px;'>" . $keyword [keyword] . "</a>";
}

Das Keyword was am meisten vorhanden ist, wird ziemlich groß dargestellt und die anderen sind nicht lesbar, da viel zu klein...
 
Zuletzt bearbeitet:
Du hast eine Tabelle für die Keywords, nicht wahr? Und jeder Tabellen-Eintrag ist auch nur ein Keyword, keine Ansammlung oder kommasepariert?

Deine Berechnung des maximalen Hubs zwischen Min und Max ist noch nicht sauber. Du brauchst definitiv auch den MAX-Wert, um überhaupt ein lineares Verhältnis der Relevance zu berechnen.

Denn:
Fontgröße(keyword) = 18px * Keywordmenge / Maximalmenge.

Und auch ich würde -wie kuddeldaddeldu- irgendwas in die DB hinzufügen. Ich würde eher eine weitere Tabelle, die die Verbindung Thread_ID(zB) zu Keyword macht. Wenn also ein keyword in der Keyword-Tabelle existiert, wird die Keyword_ID gesetzt, ansonsten ein neuer Eintrag, wiederum mit neuer Keyword_ID.

! Vorsicht, fange grad erst an -wegen eines größeren Projekts- mich mit den Widrigkeiten von Datenbanken auseinanderzusetzen. Könnte alles auch Humbug sein :D

mfg chmee
 
Nein, das Keyword mit dem höchsten Vorkommen.

Die Berechnung der Fontgröße sieht in Worten nunmal so aus : Das Keyword mit dem höchsten Vorkommen bekommt die größte Fontsize, alle anderen -die logischerweise weniger vorkommen- müssen kleiner sein. Daraus ergibt sich das obige lineare Verhältnis.

Keywordgröße = 18pt / KW(am meisten genannt) * aktuellesKW(xmalgenannt)

Dieses Verhältnis geht aber gegen 0. Sprich, ein Keyword das 1x genannt wurde, wird sehr klein. Dafür ist MIN gedacht, um die kleinste Fontgröße zu bestimmen. Müsste dann so aussehen :

Keywordgröße = MIN+ ( (MAX-MIN) / KW(am meisten genannt) * aktuellesKW(xmalgenannt) )


mfg chmee
 
OK, nun hab ichs verstanden.

Ich habe nun meine Tabellenstruktur überarbeitet und speichere nun die Anzahl des Keywords ab und habe folgendes erste einmal probiert, Problem ist nur dass alle gleich groß dargestellt werden:

PHP:
$test = mysql_query ( "Select `typed` FROM keywords ORDER BY `typed` DESC LIMIT 1" );
$max = $test [typed];

$keywordresult = mysql_query ( "Select `keyword`, `typed` FROM keywords ORDER BY `typed` DESC LIMIT 20" );
while ( $keyword = mysql_fetch_assoc ( $keywordresult ) ) {
	echo "<a href='index.php?action=search&keywords=" . $keyword [keyword] . "&search_x=true&search_y=true' style='padding:5px;text-decoration:none;font-size:";
	echo 12 + ( ( ( 18 - 12 ) / $max ) * $keyword [typed] );
	echo "px;color:";
	echo sprintf ( '#%06X', mt_rand ( '0', '0xFFFFFF' ) );
	echo ";'>" . $keyword [keyword] . "</a>";
}
 

Neue Beiträge

Zurück