&mysql : db durchsuchen
bjb
- php
0 Cheatah0 bjb0 Cheatah0 bjb0 bjb0 Sven Rautenberg0 bjb0 Sven Rautenberg0 bjb
hallo zusammen!
ich habe ein problem:
ich habe so eine art forum und würde gerne ein suchfunktion einbauen.
mittlerweile habe ich herausgefunden, dass ich dafür fulltext benutzen muss. das habe ich inzwischen auch schon in meine db eingebaut.
aber wie kann ich das jetzt mit php benutzen?
mysql_query("SELECT * FROM artikel WHERE MATCH (search) AGAINST ($for)",$db)??? dachte ich zumindest
$for enthält 'titel'
search ist der index-name
geht aber nicht:
Unknown column 'titel' in 'where clause'
die spalte soll doch laut syntax auch gar nicht 'titel' heißen,oder?
sieht jemand den/die fehler??
vielen dank
gruß
bjb
Hi,
$for enthält 'titel'
ich glaube nicht, dass $for 'titel' enthält, denn dann würde es gehen. Ich wette, es enthält titel.
die spalte soll doch laut syntax auch gar nicht 'titel' heißen,oder?
Laut *Deiner* Syntax schon.
sieht jemand den/die fehler??
Regel Nummer Eins bei fehlerhaften generierten SQL-Statements: Lasse Dir das Statement ausgeben.
Cheatah
hi
danke für die schnelle antwort
Laut *Deiner* Syntax schon.
dann habe ich wohl etwas falsch verstanden
was muss hinter das match und was hinter das against?
ich habe es so verstanden, dass hinter das match der index und hinter das against der suchtext kommt.
das scheint falsch zu sein, oder?
könntest du mir das genauer erklären?
danke
gruß
bjb
Hi,
was muss hinter das match und was hinter das against?
ich habe es so verstanden, dass hinter das match der index und hinter das against der suchtext kommt.
das scheint falsch zu sein, oder?
nein, im Prinzip ist das richtig. Nur führst Du es - vermutlich! Das lässt sich aus dem *Code* nicht ersehen. - falsch durch. Folge der Regel Nummer Eins.
Cheatah
hallo nochmal
Regel Nummer Eins.
ok
er gibt folgendes aus
SELECT * FROM news WHERE MATCH(search) AGAINST ('dfh') ORDER BY date DESC
//^^steht im mysql_query
Unknown column 'dfh' in 'where clause'
//^^ mysql_error()
ich sehe den fehler leider nicht
(search ist der index in der db;'dfh' ist der gesuchte string)
danke
gruß
bjb
hi
noch was:
wenn jemand den text sucht in dem 'baum' und 'haus' stehen, kann er dann 'baum haus' eingeben?
danke
gruß
bjb
Moin!
er gibt folgendes aus
SELECT * FROM news WHERE MATCH(search) AGAINST ('dfh') ORDER BY date DESC
//^^steht im mysql_query
Unknown column 'dfh' in 'where clause'
Unbekannte Spalte 'dfh' in WHERE-Bedingung.
Was sagt dir das? Dass es eine Tabellenspalte 'dfh' nicht gibt. Und was noch? Dass du offenbar den Inhalt von MATCH und AGAINST vertauscht hast, denn irgendwo muß man ja angeben, in welcher Spalte gesucht werden soll - offenbar ist das nicht in AGAINST. Und wenn es nicht dort ist, kann es nur im MATCH sein. Was umgekehrt bedeutet, dass die Angabe der Spalte, in der gesucht werden soll, nicht in MATCH reingehört, sondern in AGAINST.
Ein kurzer Blick ins Manual hätte dir das aber auch gesagt.
ich sehe den fehler leider nicht
Der Fehler steht, nur so nebenbei gesagt, in der MySQL-Fehlermeldung...
- Sven Rautenberg
»»»» ich habe es so verstanden, dass hinter das match der index und hinter das against der suchtext kommt.
»»»» das scheint falsch zu sein, oder?
-nein, im Prinzip ist das richtig.
Cheatah
was jetzt?
und das manual (auf jeden fall das von mysql.com) ist meiner meinung nach sehr undeutlich formuliert:
Die Funktion MATCH prüft eine natürlichsprachige Anfrage gegen (AGAINST) eine Textsammlung (einfach ein Satz von Spalten, der vom FULLTEXT-Index abgedeckt wird)
das sagt mir leider gar nichts
Unbekannte Spalte 'dfh' in WHERE-Bedingung.
englisch kann ich auch ;-)
ok jetzt hab ichs so gemacht wie du es gesagt hast:
SELECT * FROM news WHERE MATCH(dfh) AGAINST ('search') ORDER BY date DESC
Unknown column 'dfh' in 'where clause'
SELECT * FROM news WHERE MATCH(search) AGAINST ('dfh') ORDER BY date DESC
Unknown column 'dfh' in 'where clause'
LOL
wo zur hölle muss ich jetzt die spalte eintragen??
ich bin jetzt total verwirrt
könnt ihr mir weiterhelfen?
danke an alle die mir helfen (wollen)
gruß
bjb
Moin!
ich habe es so verstanden, dass hinter das match der index und hinter das against der suchtext kommt.
das scheint falsch zu sein, oder?
-nein, im Prinzip ist das richtig.
Cheatah
was jetzt?
Tja, ein Blick in die Doku hilft (abgesehen davon, dass du dich nicht unbedingt klar ausgedrückt hast):
http://www.mysql.de/doc/de/Fulltext_Search.html
Und da steht als Beispiel für eine Abfrage:
SELECT * FROM artikel WHERE MATCH (titel,artikeltext) AGAINST ('Datenbank');
Das Ergebnis sollen alle Werte sein, die das Wort Datenbank enthalten.
ok jetzt hab ichs so gemacht wie du es gesagt hast:
SELECT * FROM news WHERE MATCH(dfh) AGAINST ('search') ORDER BY date DESC
Unknown column 'dfh' in 'where clause'
Ok, mal angenommen, du suchst nach dem Wort "search" in der Spalte "dfh", dann ist diese Abfrage korrekt.
SELECT * FROM news WHERE MATCH(search) AGAINST ('dfh') ORDER BY date DESC
Unknown column 'dfh' in 'where clause'
Wenn du nach dem Wort "dfh" in der Spalte "search" suchst, dann ist diese Abfrage korrekt.
Die entscheidende Frage: Hast du einen Volltextindex angelegt? Wie heißt der? Wenn du dir die Tabellenerstellungsanweisung auf der verlinkten Seite mal ansiehst, dann siehst du, dass ein Volltextindex auf zwei Spalten gelegt wird. Diese Bezeichnung wird im MATCH wieder verwendet.
- Sven Rautenberg
hallo
danke
ich habs jetzt endlich verstanden
gruß
bjb