Suchen
systom
- php
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
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)
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 |
----+------------+-------------+----------+-------+---------+-------+
bei dieser konstellation ist mir das zu schwerer toback ;-)
sry dass ich nicht weiterhelfen kann, ich hoffe du findest noch ne lösung
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
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