Mailinglisten-Archive |
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