phpbar.de logo

Mailinglisten-Archive

AW: Volltext-Suche

AW: Volltext-Suche

Ecki Gemmel mysql-de_(at)_lists.bttr.org
Fri, 22 Mar 2002 14:25:04 +0100


ich poste Euch einfach mal meine praktizierte Lösung. Vielleicht hilft Sie 
Dir weiter
Gruss aus Brandenburg
Ecki Gemmel


// Suchprozedur über mehrere möglliche Stichwörter in einem Suchstring und 
zwei Textfelder zum Suchen
// ------------------
//********************************************************************************************
//suchstichwort zerlegen anhand Leerzeichen als Trennzeichen und in Array 
&avar speichern
   $avar = preg_split("/[ \t.!?]+/", 
$stichwort);         //Mehrfachleerzeichen ignorieren
   $len = count($avar);  // Anzahl Suchbegriffe

   // Auch ein 0 -Array (kein Stichwort) spuckt $len-Wert 1 aus, deshalb 
Inhalt testen
   if (strlen($avar[0])>1) {
       if (strlen($branche)>1):  // Ist Brancheneintrag angewiesen - 
selbigen ins Array nachtragen
       $avar[$len]=$branche;   // Array Nummerierung ab 0, deshalb neuer = 
Anzahl
       endif;
       }
   else {
       if (strlen($branche)>1):  // es soll offensichtlich nur Branche 
gesucht werden
       $avar[0]=$branche;   // in Datensatz 0 des Arrays weil kein 
stichwort vorhanden
       endif;
       }
    //   print_r($avar);

   $laenges1 = strlen($avar[0]);  // Zeichenlänge des ersten Stichwortes 
für Entscheidung SQL basteln

//********************************************************************
// SQL Sring für $avar > "" d.h. Such-Stichwörter wurden angewiesen
//********************************************************************
if ($laenges1 > 1):     // d.h. mindestens ein Suchbegriff

//über alle Stichwortarray in $avar(x) suchen
//Beginn Puzzle - SQL Kommando $queryanzahl für Treffermenge
$queryanzahl = "SELECT COUNT(id_firma) FROM firma where (";
$query = "SELECT * FROM firma where (";

$ArraySize = sizeof($avar);                // Größe des Arrays
for ($i=0;$i<$ArraySize;$i++)
     {
     $SQLClause = $SQLClause . "stichpunkte like '%$avar[$i]%' or branche 
like '%$avar[$i]%'";
         if( $i < $ArraySize-1 ):
         $SQLClause = $SQLClause . " or ";
         endif;
     }
$SQLClause = $SQLClause . ") and plz like '".$plz."%'";

//Fertigstellen SQL Puzzle SQL String für Anzahl Treffer ohne Limit der Seiten
$queryanzahl = $queryanzahl . $SQLClause;

//Fertigstellen SQL Puzzle vollständiger SQL String
$SQLClause = $SQLClause . " LIMIT ".$start.",".$limit;
$query = $query . $SQLClause;

endif;



>Fazit:
>man suche per
>"SELECT * FROM Tbl WHERE (fld LIKE '%wort1%') OR (fld LIKE '%wort2%') usw.."
>und werde glücklich ?
>Vielleicht mal als Zusatzinfo: es geht um eine Tabelle mit < 1000
>Datensätzen...



------------------------------------------------------------------
E. Gemmel, Systemhaus Brandenburg GmbH
gemmel_(at)_systemhaus-brandenburg.de / fon: +49 3381 2616-0


---
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive