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

Na prima.
son gohan hat gesagt.:
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?
Wenn Du die Id der aktuellen Seite in einer Variablen hast (z.B. $aktID), dann erweitere einfach die WHERE-Bedingung à la
Code:
...WHERE MATCH ... AND `id` <> '$aktID'
Nach etwas mehr Lektüre der Fulltext-Funktion habe ich nun selbst gemerkt, dass der Titel $tit garnicht erst mit explode() in einzelne Worte aufgespalten werden muss, sondern dass das auch so geht. Also: Vergiss das mit dem explode(). (Oder besser doch nicht vergessen, explode und implode sind ansonsten sehr nützlich :))
Martin
 
Hallo, ich hab es so erweiter mit
komplett sieht die Abfrage jetzt so aus:
SELECT * FROM links WHERE MATCH name AGAINST ('$tit') AND `id` <> '$aktID'
aber es reagiert nicht auf die Abfrage.

Jeder Link aus meiner Tabelle hat unter dem Datenfeld id auch eine eigene id-nummer, das war doch die Voraussetzung.

Muss ich die Erweiterung der Abfrage vielleicht anders schreiben? Wo steht das im MySQL Handbuch? Ich muss doch nicht etwa dort wo '$aktID' eine eigene id Nummer jedesmal eintragen? Das sieht so aus als ob ich ja auch erst mal irgendwo die $aktid Variable definieren muss, aber wie genau mache ich das damit es mit den id Nummern aus der Tabelle arbeitet?

Und was ist das <> für eine Vergleich?
 
<> heißt "ungleich", man kann bei MySQL auch != schreiben.
(http://dev.mysql.com/doc/mysql/de/comparison-operators.html).

Natürlich ist $aktID eine PHP-Variable die definiert sein muss und die den Wert der id-Spalte der aktuell angezeigten Seite (des aktuell angezeigten Links) enthält. (Wenn Du willst kannst Du die variable auch $wurstbrot nennen. :))

Wenn Du diese ID der aktuellen Seite nicht kennst, dann kannst Du auch den Titel der aktuellen Seite nehmen, den kennst Du ja, der ist ja offensichtlich in $tit abgespeichert. Dann sähe das so aus:
Code:
SELECT * FROM `links` WHERE MATCH `name` AGAINST ('$tit') AND `name` <> '$tit'
Das ist halt nicht so "hübsch" wie mit der ID, weil nicht so eindeutig.

Martin
 
toll wieviel Operanten Mysql zu Verfügung stellt.

Nein, die Lösung mit der Titel Tag Variable $tit funktioniert bei mir leider nicht, meine Anbfrage sieht so aus:
SELECT * FROM links WHERE MATCH name AGAINST ('$tit') and
'id' <> '$tit',
aber es wird trotzdem die gleiche Seite nochmal als Tip ausgegeben.

Aber da du auch schon selbst sagst das es nicht so hübsch ist, würde ich mal gerne wisse wie ich ganz elegant auf diese id zugreifen könnte? Wenn ich schließlich nur die Nummer der ID aus der Tabelle eintrage dann klapt es schon.

Warum schreibst du die Datenfeldernammen immer in Hochkomma? Habe ich da etwas falsch gelertn oder ist das einfach sicherer so? Ach ja, oder liegt es daran das man in PHP Tags das anders schreiben kann als in einer reinen Mysql> Abfrage
 
Zuletzt bearbeitet:
Wenn man MySQL-Statements einigermaßen wasserdicht schreiben will (z.B. gegen SQL-Injections), dann sollten alle Namen von "DB-Objekten", also Tabellennamen, Feldnamen, Indexnamen usw. in sog. "Backticks" stehen und alle Zeichenketten in Hochkommas. AUFPASSEN: Das ist nicht das selbe - deshalb funktioniert auch Dein Statement nicht. Der "Backtick" ist sozusagen ein französischer Accent, so wie der auf dem è, die Taste zwischen dem ß und dem Backspace (auf einer normalen deutschen Tastatur), man muss mit deutscher Tastatur erst Shift-` drücken und danach die Leertaste.
Kann man auch weglassen - ich versuche grade mir anzugewöhnen, das immer schön korrekt zu machen.
Also: Nicht 'id', sondern `id`. Und außerdem musst Du natürlich $tit nicht mit `id` vergleichen, sondern mit `name`.

Martin
 
Hallo,

vielen Dank lieber Martin, ich werde mir das nochmal genau anschauen müssen und mit Backticks schreiben demnächst, gilt das auch für die gleichen Befehle in PHP Tags, also müssen die dort auch auf jeden Fall mit Backticks geschrieben werden?

Ich frage weil ich davon bis heute irgendwie noch nichts mitbekommen habe, zugut das ich das jetzt mal von dir erfahre, ich glaube im MySQL Handbuch würde auch nicht darauf hingewiesen.

Bei meinem Script ist mir jetzt etwas aufgefallen, der Titel Tag ist nicht identisch mit der Linkbezeichnung aus dem name Feld. Also kann das Abfrage Ergebnis auch nicht verhindern das die gleiche Seite unten nochmal als Linktip ausgegeben wird.
Ich müsste es jetzt irgendwie anders schreiben, so das die id verglichen wird, hast du eine Idee für mich, mir fällt nichts ein folgendes Beispiel ist alles was ich zu bieten habe, aber dabei wird wieder nichts mehr ausgegeben ?
SELECT * FROM `links` WHERE MATCH `name` AGAINST ('$tit') AND `id` <> `id`
 
Zuletzt bearbeitet:
Du musst aufpassen, dass Du die Sprachen nicht durcheinander bringst. PHP ist die Scriptsprache, die die Ausgabe steuert, SQL ist die Abfragesprache für die Datenbank. Die beiden haben erst mal gar nichts miteinander zu tun, beide können völlig unabhängig voneinander benutzt werden. Man nutzt zwar die eine Sprache (PHP) um "Befehle" in der anderen Sprache (SQL) an das Datenbank-Management-System zu senden und um dessen Ausgaben auszuwerten, trotzdem muss man aufpassen, dass man die beiden geistig auseinander hält.
Kurz gesagt: Backticks gibt's in PHP nicht.

Ich kann Dir leider nicht sagen, woher Dein PHP-Script die ID der aktuell angezeigten Seite kennen soll, dazu kenne ich Dein Script zu wenig - eigentlich gar nicht. Wenn $tit (die PHP-Variable) ungleich `name` (das Datenbankfeld) ist, dann bekommst Du anscheinend $tit nicht aus der Datenbank... dann weiß ich leider auch nicht.

Martin
 
Hallo,

$tit ist eine Variable die ich am Anfang der Datei erstelle um dort den Titel rein zu schreiben, die Variable setzte ich dann in der Seite öfters mal ein und exklusive natürlich beim Titel Tag.

In dem Script suche ich mit der Mysql Votextsuche nach ähnlichen Einträgen aus der Tabelle.

Die Tabelle ist wie folgt aufgebaut:

------------------------------------------------------------
id | name | url | infoart |
------------------------------------------------------------
1 Name1 www. video
2 Name2 www. text


Es ist also eine Linksammlung. Die Variable $tit hat nichts damit zu tun, in ihr sind nur Worte enthalten die den Namen der Einträge ähneln.

So und nun das Script:
PHP:
<?php
   $res = mysql_db_query("DB68640", "SELECT * FROM `links` WHERE MATCH `name` AGAINST ('$tit') AND `id` <> `id`");
   $num = mysql_num_rows($res);

   if ($num == 0) { echo ""; } else { 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";
   }

   if ($num == 0) { echo ""; } else { echo "</ul>"; }

   mysql_close($db);
?>

wenn du das jetzt siehst fällt dir dann was ein?
 

Neue Beiträge

Zurück