Stichwortsuche mit mehreren Suchbegriffen

Dörti.Hermi

Erfahrenes Mitglied
Hallo zusammen!

Nach endlosen Stunden der Sucherei und Verwirrung bin ich nun wieder mal hier gelandet, meinem treuen, alten Forum ^^
Es geht um eine eigentlich simple Suchfunktion mit php/mysql. Ich habe eine bestimmte Tabellenspalte, wo in jeder Zelle mehrere Stichwörter enthalten sind. Nun möchte ich einfach diese Tabelle (bzw. eh nur diese Spalte) nach mehreren Suchbegriffen (getrennt durch Beistriche) durchsuchen. Wie das gehen soll, hab ich absolut keine Ahnung. Hab schon so viel über diese FULLTEXT-Suche von MySQL gelesen, werd aber überhaupt nicht schlau daraus. Und wie das mit LIKE gehen soll, wenn ich mehrere Begriffe hab, versteh ich auch nicht.

Mein Wunsch wäre es, wenn der Datensatz, in dem die meisten Treffer zu finden waren, an erster Stelle ist. D.h. wenn in einem Datensatz 3 der 4 Suchbegriffe zutreffen, soll der vor dem stehen, bei dem nur mehr 2 von 4 Suchbegriffen zutreffen.

Die eingegebenen Suchbegriffe hab ich mal so im array "splitted" untergebracht:
PHP:
$input = mysql_real_escape_string($_POST['suchbegriffe']);
$input = trim($input); //Leerzeichen entfernen
$splitted = explode(",",$input); //einzelne Begriffe aufteilen (sind immer durch Beistrich getrennt)

Hoffe ich konnte mein Problem irgendwie deutlich schildern. :confused:
Danke schon mal im Voraus,
Lg Andi
 
Ich würde dir raten, dass du deine Datenbank normalisierst. Danach gehen solche Anfragen leichter, schneller und du kannst mit dem Sprachkonstrukt COUNT() von MySQL ermitteln, wie viele Suchbegriffe bei einem Datensatz übereinstimmen.
 
Falls es jemanden interessiert, ich habe eine Lösung gefunden!
PHP:
$input = mysql_real_escape_string($_POST['suchbegriffe']);
$input = trim($input); //Leerzeichen entfernen
$charsToDelete = array("\\r\\n", "\\n", "\\r"); //Zeilenumbrüche entfernen
$input = str_replace($charsToDelete,'',$input);
		
$splitted = explode(",",$input);

$searchstring = "besetzung LIKE '%".$splitted[0]."%'";
		
for($i=1; $i<count($splitted); $i++) //bei mehr als einem Suchbegriff, weitere zur Abfrage hinzufügen
{
	$searchstring .= " AND besetzung LIKE '%".trim($splitted[$i])."%'";
}
		
$sql = "SELECT * FROM noten WHERE ".$searchstring." ORDER BY komponist ASC";

Funktioniert wunderbar. Ich habe auch noch irgendwas von einer Lösung mit WHERE feld IN ('wort1','wort'2,...) gelesen, hab ich aber irgendwie nicht zum laufen gebracht...
 
Wäre sicher eine schöne Möglichkeit, bin mit meiner aber eigentlich zufrieden. Danke trotzdem! :)

lg Andi
 
Zurück