Suche ohne leere Felder

Ehrlich gesagt... ich steh jetzt doch noch ein bisschen aufm Schlauch... wollt das grad umsetzen... aber... ich hab keine Ahnung, wies dann weiter geht... was soll ich denn bei else schreiben? Und wie setz ich das ganze zusammen
 
Zuletzt bearbeitet:
Ok, ich gebe zu, daß ich noch nicht so ganz vollständig kapiert habe, um was es genau geht. Zumal zwischendrin immer wieder mal von einem INSERT die Rede war, was bei einer Abfrage nicht viel Sinn macht. Ich gehe jetzt mal davon aus, daß du immer die gleichen Felder als Suchkriterien hast und nur die Ergebnisse haben willst, wo in der DB Tabelle alle gesuchten Felder auch gefüllt sind. Wenn also wie am Anfang nach Hans Schmidt aus "" gesucht wird, dann sollen alle Hans und alle Schmidt gefunden werden, die in "irgendwo" wohnen. Richtig?

Dann nimmst du dir für jedes Suchfeld eine Abfrage, ob der übergebene Wert leer ist. Wie das aussehen könnte, habe ich in meinem letzten Posting schon geschrieben. Wobei ich jetzt davon ausgehe, daß du die übergebenen Werte schon verarbeitet hast. Darum keine $_POST mehr.
PHP:
if (!empty($kundename)) 
  $sqlname = "kunde_name like '%" . $kundename . "%'"; 
else 
  $sqlname = "kunde_name != '' ";  
if (!empty($kundevorname)) 
  $sqlvorname = "kunde_vorname like '%" . $vorname . "%'"; 
else 
  $sqvorname = "kunde_vorname != '' ";  

...
Der Zusammenbau sieht dann so aus.
PHP:
"select * from kunde where (".$sqlname." or ".sqlvorname." or ". ....) and gueltig = 'j';"
Wobei mir immer noch nicht kar ist, warum alles mit OR verknüpft wird. Wenn du alle Hans und alle Schmidt suchst die irgendwo wohnen, muß es heißen ("Hans" oder "Schmidt") UND "irgendwo", da bei einer weiteren OR Verknüpfung auch alle Wolfgangs und Meiers usw. gefunden werden, nur weil deren Standort nicht leer ist.
 
Hi.

Das ist doch keine vernünftige Programmierung per Hand 8 if Bedingungen da hinzuschreiben und vor allem dann später zu warten, was man ja dann eigentlich auch noch für das INSERT und UPDATE machen müßte.

@atlantyz: Ich habe dir mal etwas für die Suche geschrieben.
PHP:
// map sql columns to form element names
$columns = array(
          'kunde_telefonnummer' => 'kundetelefon',
          'kunde_vorname' => 'vorname',
          // ...
          );

$cond = array();
foreach($columns as $col => $field) {
  if (!empty($_POST[$field])) {
      $cond[] = "$col like '%$_POST[$field]%'";
  }
}

$cmd = 'SELECT * FROM table where ' . implode(' or ', $cond);
Die nicht ausgefüllten Suchfelder werden einfach ignoriert, ich denke es ist nicht sinnvoll wenn nichts eingegeben wurde, alle Einträge rauszusuchen wo das entsprechende Feld nicht leer ist.

Gruß
 
Ja, okay... um nochmal meine Suche zu verdeutlichen:

Ich habe einige Eingabefelder... z.B. Name, Vorname, Standort.

Nun kann ein User diese Felder ausfüllen oder eben nicht. Und egal, wo was drin steht und was, da soll nach gesucht werden.

Gibt der z.B. Name Meier und Standort Buchhaltung ein, sollen mir alle Leute mit Namen Meier (egal wie der Vorname ist oder wo der Standort ist) und alle Standorte Buchhaltung (egal wie die Leute heißen) gesucht werden :-)

Deswegen hab ich alles mit Or verknüpft. Oder ist das falsch Ich denke nicht... denn bei AND müssten ja zwei Sachen übereinstimmen... sollen sie aber nicht unbedingt...
 
Man kann jetzt nicht generell sagen, daß in dem Fall OR immer richtig ist. Wenn der User "Hans" und "Meier" eingibt und sonst nichts, erwartet er, alle Hans und alle Meier zu bekommen, egal was in deren Datensätzen in Standort eingetragen ist. Wenn das gewollt ist, ist derr Ansatz von deepthroat richtig.
Wenn das leere Feld Standort mit berücksichtigt wird, werden bei OR zusätzlich alle Datensätze ausgegeben, bei denen der Standort leer ist, unabhähgig davon, was im Namen steht..
Wird mit AND verknüpft (und die beiden Namen eingeklammert), gibt er alle "Hans" und alle "Meier" aus, deren Standort leer ist.
Wird der Standort auf "nicht leer" geprüft, weil z.B. eine Kombination mit "ohne Standort" nicht sinnvoll ist, muß mit AND verknüpft werden, da sonst bei OR alle Datensätze zusätzlich ausgegeben werden, bei denen in Standort was drin steht.

Wie du siehst, gibt es eine Menge Möglichkeiten, die Felder zu verknüpfen und jedesmal ein anderes Ergebnis zu erhalten. Wie du das jetzt filterst hängt einfach davon ab, wie die Ausgabe aussehen soll.
 
@deepthroat: vielen, vielen Dank. Das ist genau das, was ich gesucht habe :-)

Er zeigt mir jetzt alle gesuchten Begriffe an.

Liebe Grüße
Joey
 
Zurück