PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Auf einen String in einer PHP-Datenbank überprüfen !


ghunt
17.05.2002, 15:54:39
Halli und Hallo.

Ich habe folgende Situtation : Ich erschaffe gerade eine Knowledgebase.
In dieser befinden sich natürlich etliche Themen, die ich aber nicht immer alle gebrauchen kann.
Ich möchte nun folgendes erreichen :
Nach Eingabe eines Suchstrings in einem Formular werden alle Datensätze der Datenbank komplett angezeigt, die einen Suchstring enthalten.
Dabei müssen aus der Datenbank zwei Felder überprüft werden, nämlich die Überschrift und der Text.
Welche Funktion kann ich dafür benutzen, also wie kann ich einen Text nach einem String durchsuchen lassen ?
Meine textfelder sind vom Typ Longtext.

Auf viele schnelle Antworten hoffend
G.Hunt

Progman
17.05.2002, 18:36:22
...
WHERE
feld1 LIKE '%$Suchstring%' OR
feld2 LIKE '%$Suchstring%'

Aber vielleicht bringt dir auch die FULLTEXT SEARCH. Such in der MySQL Doku nach diesem Begriff.

Nev
17.05.2002, 21:02:15
Hi @ll

Ergänzung:

Like gibt alle Rows aus, wo der Suchbegriff gefunden wird.

Man kann nun mehrere Optionen setzten durch %
die Position des % gibt an das es davor bzw. danach egal ist was steht.

zB:
like '".$search."%'
Sucht alle Rows die mit search beginnen

like '%".$search."'
Sucht alle Rows die mit search enden

like '%".$search."%'
Sucht alle Rows wo search in jeglich Art vorhanden ist

kaiser_sosse
21.05.2002, 14:50:35
mahlzeit,

ich programmiere im moment ebenfalls eine wissensdatenbank für einen grossen it-dienstleister.

also entweder ganz konservativ:
"SELECT * FROM tbl_bla
WHERE ueberschrift like LIKE '%$volltext%
OR text like LIKE '%$volltext%'"

oder
du erzeugst einen volltextindex auf die entspechenden felder deine mysql-datenbank (ab version3.23.23) folgendermaßen:

"ALTER TABLE tablename ADD FULLTEXT(ueberschrift, text)"
oder benutze MySQL-Front dafür.

die abfrage lautet dann:
"SELECT * FROM tbl_bla
WHERE MATCH (ueberschrift, text) AGAINST ('$volltext')"

vorteile: sauschnell

2 wichtige nachteile:
- basiert auf ganzen wörtern. d.h. wenn du nach "banane" suchst, wird "bananen" schon nicht mehr gefunden.
- wörter müssen min. 4 zeichen lang sein.

ich habe jedenfalls auf grund der o. a. nachteile den konventionellen weg gewählt.

gruss
gunnar

Progman
21.05.2002, 15:39:10
Dann schreib mal ein Script mit WHERE Bedingung was

+MySQL "Ein Text" -"Das nicht" -bla dies

kann, sie es FULLTEXT SEARCH kann. Das wird ne arbeit ;)

kaiser_sosse
21.05.2002, 17:35:20
icke nochmal,

dazu brauchst du aber mysql 4.0..
haste aber bei den meisten providern nicht.
abgsehen davon probier mal einem user zu erklären warum "die blöde kiste" "banane" findet und "banane" schon wieder nicht.

aber muss man letzendlich selber abschätzen können, ob man gnadenlose funktion und performance brauch oder eben usabilty.


die "+" lösung; d.h. zwei strings die in beliebiger reihenfolge im formular durch ein "+" getrennt eingebenen werden können; sieht bei mir dann so aus:

if ($volltext != "") {
$suchstring .= "§volltext=$volltext";
if (strstr($volltext,'+')) {
$teil = explode("+",$volltext);
foreach ($teil as $wert) {
$sql .= " AND (problem LIKE '%$wert%' || ursache LIKE '% $wert%' || loesung LIKE '%$wert%')";
}
}
else {
$sql .= " AND (problem LIKE '%$volltext%' || ursache LIKE '% $volltext%' || loesung LIKE '%$volltext%')";
}

gruss

gunnar