Abfrage ähnlich --> Verwandte Themen auf tutorials.de

son gohan

Erfahrenes Mitglied
Hallo Leute :),

also ich habe eine MySQL Tabelle mit Namen links und den Datenfeldern id, name, url und katg :).

So, jetzt bin ich schon seit zwei Tagen daran am Überlegen, was für eine Abfrage an die Tabelle gemacht werden muss, damit ich eine Ausgabe so ähnlich wie die unten bei Tutorials.de angezeigt wird mit verwanten Themen.

Ich denke mal das Script von Tutorials vergleicht auch den Titel Tag mit den Einträgen aus der Datenbank. :confused:


Also das Problem scheint bei mir die Abfrage zu sein, unten findet ihr mein derzeitiges Script.



PHP:
<?php
   $res = mysql_db_query("DBname", "select name, url from links where name like '%$tit%' LIMIT 8 order by name");
   $num = mysql_num_rows($res);

   echo "<p class=\"frage_1\">Weiterf&uuml;hrende Themen</p>
<ul class=\"frage\">";

  for ($i=0; $i<$num; $i++)
   {
      $vn = mysql_result($res, $i, "url");
      $nn = mysql_result($res, $i, "name");

      echo "<li><a href=\"$vn\">$nn <img class=\"wft_bild\" src=\"gif/schrift.gif\" alt=\"$nn\" title=\"$nn\" /></a></li>\n";
   }

   echo "</ul>";

   mysql_close($db);
?>

Die Schleife funktioniert und alles andere am Script tuts auch, nur die Abfrage scheint nicht ganz richtig zu sein. Ach ja, mit dem LIMIT 8 will ich erreichen das höchstens acht Datensätze mit der Schleife erzeugt werden.

Ich freue mich über euren Rat.
 
mhh...versuche es mal ohne Limit 8 oder:
$res = mysql_db_query("DBname", "select name, url from links where name like '%".$tit."%' LIMIT 8 order by name");

Ich bin nicht so der Pro in php aber wenn in $tit der Titel gespeichert ist muss man doch Strings mit "." verbinden...
oder gib mal nen statischen Titel ein und versuche es damit!
 
Hallo,

ich habe gemerkt das das LIMIT 8 zunächst die meisten Probleme macht und es ganz raus genommen.

Ja, in der Variable &tit ist der Titel gespeichert, habe ich wohl noch vergessen zu sagen. :-(

Der Titel besteht aber meist aus mehreren Worten und das verursacht wohl auch Probleme, denn wenn ich nämlich nur ein Wort rein schreibe wird auch etwas gefunden, wenn ich mehre Worte rein schreibe, dann wird nichts mehr gefunden. Obwohl doch das erste Wort alleine schon mal gefunden wurde.

Hmm, wie machen die das bei Tutorials.de? Wie bekomme ich es hin mit meiner Abfrage zumindest etwas ähnliches zu zaubern?
 
Zuletzt bearbeitet:
wie wärs wenn du den Titel nach dem 1. Wort splittest und nur noch das 1. Wort verwendest?
und unten bei Tutorials gibts auch Sachen die Absolut nicht passen...also würde das auch gehen!
und statt Limit 8 kannste auch Select TOP 8 name, url from links...
verwenden!
 
hi, wenn ich die Abfrage so schreibe wie du empfiehlst mit TOP 8 nach dem select :

PHP:
select TOP 8 name, url from links where name like '%$tit%'  order by name

bekomme ich eine Fehlermeldung. :(

Das Beispiel mit dem splitten würde ich gerne mal sehen wie das geht? :)
 
komisch ich habe keine bekommen...(was bekommste den für ne Fehlermeldung?)
mhh ich kann nicht wirklich php^^ musste halt mal nach string split suchen bei google
also wenn ich mich nicht irre musst du beim Leerzeichen trennen und bekommst dann nen Array...
 
Hallo,

wenn ich TOP 8 wie oben beschrieben in die Abfrage dazu schreibe bekomme ich diese Fehlermeldung:

PHP:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Dokumente und Einstellungen\Eigene Dateien\apachefriends\xampp\htdocs\xampp\ae.html on line 99

Irgendwie hat der wohl da Probleme mit der Abfrage mysql_num_rows() aber warum den?

Ohne die TOP 8 Angabe bekomme ich ja auch keine Fehlermeldung.

Wegen dem string splitten habe ich eben unter http://www.php-faq.de eine Beispiel gefunden wie ich nur die ersten 20 Zeichen oder ganze Wörter mit höchstens 20 Zeichen ausgeben lassen kan, aber ich bräuchte höchstens nur ein Wort zum ausgeben eine Methode.

Und ich frage mich immer noch wie die von Tutorials.de das unten mit der ABfrage hinbekommen?
 
Also bei MySQL ist das "LIMIT 8" schon korrekt, "TOP 8" ist ein anderer SQL-Dialekt (ich glaube MS' Transact-SQL).
Der Knackpunkt liegt in den Titeln mit mehreren Worten. Klar, könntest Du einfach nur das erste Wort nehmen, das ist aber nicht so recht zielführend, das erste Wort ist ja oft z.B. ein Artikel wie "Der", "Die" oder "Das" oder sowas allgemeines wie "Problem".

Ich würde mir mal die Volltext-Index-Such-Möglichkeiten von MySQL anschauen: http://dev.mysql.com/doc/mysql/en/fulltext-search.html.
Damit könntest Du die Spalte `name` gegen jedes Wort aus $tit "matchen" (hierzu kommt mir als erstes die PHP-Funktion explode() in den Sinn). Ich hab' jetzt aus dem Stegreif keinen fertigen Quellcode für Dich aber in die Richtung würde ich mal forschen.

Würde auch was drauf wetten, dass die "Ähnliche-Themen-Funktion" von tutorials.de so arbeitet...

Martin
 
Hallo, danke, so macht lernen Spaß, gute Antworten und gute Links. Ich werde mir das jetzt mal etwas durchlesen.

Damit könntest Du die Spalte `name` gegen jedes Wort aus $tit "matchen"

mit matchen meinst du doch vergleichen, oder?
hierzu kommt mir als erstes die PHP-Funktion explode() in den Sinn

ich hab den link zu der MySQL-Volltextsuche noch nicht gelesen, aber dein Hinweis mit der PHP-Funktion explode etwas zu machen verunsichert mich, weil ich damit noch nie gearbeitet habe.
 
So, ich habs gelöst;

Um die Spalte einer Tabelle mit einem solchen Index zu belegen muss das SQL-Statement ALTER TABLE tabellenname ADD FULLTEXT (textpalte) ausgeführt werden, welches einen entsprechenden Wortindex anlegt. Anschließend kann mit einer Abfrage wie SELECT * FROM tabellenname WHERE MATCH textspalte1 AGAINST ('suchtext') der Index durchsucht werden. Dieser Wortindex reagiert nur auf ganze Worte, es kann also nicht nach Teilworten oder Wortkombinationen gesucht werden. Die Suche nach "Bauer" findet also nicht "Bauernhof".

Vielen Dank für eure Hinweise Leute. :)

edit 21:59: halt, was muss noch in die Abfrage mit rein damit nicht die aktuell geöffnete Seite als Linktip angegeben wird? Alos wie kann ich die immer auschließen?
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück