systom: Suchen

Hallo Zusammen,

Ich habe 5 FormFelder Diese werden als Array an ein Suchscript gesendet.

<input type="text" name="rupr[0]" value="">

<input type="text" name="rupr[1]" value="">

<input type="text" name="rupr[2]" value="">

<input type="text" name="rupr[3]" value="">

<input type="text" name="rupr[4]" value="">

Nun möchte ich die ganze Tabelle (90 Spalten) durchsuchen:

if (isset($_REQUEST['rupr'])) {

$arr    = $_REQUEST['rupr'];
 $newArr = array();
 foreach($arr as $val){
    if(!in_array($val,$newArr)){
        $newArr[] = $val;

$form1 = $val;
$query_such1 = "SELECT * FROM Tabelle

Spalte1  LIKE '%$form1%'   ||
Spalte2  LIKE '%$form1%'   ||
Spalte3  LIKE '%$form1%'   ||
Spalte4  LIKE '%$form1%'   ||
Spalte5  LIKE '%$form1%'   ||
Spalte6  LIKE '%$form1%'   ||
...
Spalte90  LIKE '%$form1%'   ||

GROUP BY ID
ORDER BY Name1 ASC";

Ergebnis soll sein:

Wenn die eingegebenen Suchbegriffe überein stimmen -->
Gib den Datensatz aus-->

Wenn weniger suchbegriffe eingegeben werden ignoriere den leeren string und suche nur nach der eingabe-->

Wie muss ich den array behandeln und die Query für die Datenbank bilden

Vielen Dank im Voraus

Tom

  1. mmh, sieht komplizierter aus, als es sein sollte ...

    sind die spalten ähnlich benannt?
    (also sind nur die endungen mit anderen zahlen?)

    wenn ja kannst du eine variable-variable für die abfrage verwenden und musst nicht alle 90 spalten eintippen
    (meinst du echt 90 spalten und nicht zeilen? sry für die blöde frage, aber das sind scho verdammt viele)

    1. mmh, sieht komplizierter aus, als es sein sollte ...

      sind die spalten ähnlich benannt?
      (also sind nur die endungen mit anderen zahlen?)

      nein die spaltennamen sind suchbegriffe die ich später in einer detailabfrage noch brauche

      wenn ja kannst du eine variable-variable für die abfrage verwenden und musst nicht alle 90 spalten eintippen
      (meinst du echt 90 spalten und nicht zeilen? sry für die blöde frage, aber das sind scho verdammt viele)

      es sind ca.90 suchbegriffe in den zeilen sind dann die firmen, die wiederunm haben unter den suchbegriffen 1 oder 0

      siehe:

      ----+------------+-------------+----------+-------+---------+-------+
       id | begriff1   | begriff1    | begriff90| plz   | Name    | Str   |
      ----+------------+-------------+----------+-------+---------+-------+
       1  | 0          | 0           | 1        | 12345 | Firma 1 | Str 1 |
       2  | 1          | 1           | 1        | 12345 | Firma 2 | Str 2 |
       3  | 0          | 1           | 0        | 12345 | Firma 3 | Str 3 |
       4  | 1          | 0           | 1        | 12345 | Firma 4 | Str 4 |
       5  | 0          | 1           | 1        | 12345 | Firma 5 | Str 5 |
       6  | 1          | 0           | 0        | 12345 | Firma 6 | Str 6 |
      ----+------------+-------------+----------+-------+---------+-------+

      1. bei dieser konstellation ist mir das zu schwerer toback ;-)

        sry dass ich nicht weiterhelfen kann, ich hoffe du findest noch ne lösung

      2. Hello,

        wenn die Suchbegriffe alle vom selben Datentyp sind, solltest Du sie längst normalisiert haben; ggf. durch Klassifizierung und der Zuhilfenahme einer zusätzlichen Klassifizierungstabelle.

        Dann wird auch die Abfrage wieder ganz einfach.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    2. Hello,

      wenn man eine Datenbank sinnvoll nutzen will, sollte man als eines der ersten Kriterien die Performance im Auge behalten. Das bedeutet, dass man bei Suchen ggf. erst über eine Index sucht und ein Subset erzeugt und dann über den zweiten Index ... und erst ganz zum Schluss die Volltextsuche in den verbliebenen Datensätzen einsetzt.

      Dazu ist es dann wichtig, ob man  = ,  like $var%  , oder  like %$var%   benutzen muss. Die langsamtse Variante ist sicherlich die String-in-String also %var% .

      Für die Aufbereitung des where-Statements baust Du Dir eine Funktion.

      Je nachdem, ob % als erstes oder letztes Zeichen im Suchstring vorkommt, wird LIKE oder = benutzt.

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen