Individuelle Suche

Ja, aber eben nur die, die der Anwender auch vorgeben will.
Wenn was dazwischen kommt ==> Einschränkung.
Wenn nix dazwischen kommt ==> keine Einschränkung.
 
Das war ja aber gerade das Thema, dass er nicht erst noch alle Felder auf Inhalt überprüfen will und sich dann für eine passende SQL-Abfrage entscheiden muss.
Mein Vorschlag funktioniert, egal wie viele Suchbegriffe eingegeben werden.
Unschön ist vielleicht, dass wenn kein Suchbegriff verwendet wird, alles gefunden wird. Aber das wäre meiner Meinung nach noch nicht einmal falsch und würde dem Verhalten einer Suche entsprechen.
 
Ich würde auch vorschlagen, dass erst geprüft wird, welche Felder benutzt worden sind und dann der SQL-String zusammengesetzt wird, also:

PHP:
sql = "SELECT * FROM table WHERE ";

if (isset($_POST['wert1'])) {

sql.= "value1 = %".$_POST['wert1']."%";

}elseif (isset($_POST['wert2'])) {

sql.= ", value2 = %".$_POST['wert2']."%";

}else{
sql = "SELECT * FROM table"
}
 
Ich sage ja nicht deine Idee wäre falsch.
Ich möchte nicht, dass wenn ich irgendwo ein Feld leer lasse, alle Datensätze bekommen.
Jeder wie er mag, ich ziehe mich aus dem Thema wieder zurück ^^
 
Ich will hier niemanden vertreiben :-)

Ich möchte nicht, dass wenn ich irgendwo ein Feld leer lasse, alle Datensätze bekommen.

Bekommst du ja auch nicht. Sobald nur ein Suchfeld ausgefüllt ist, bekommst du auch nur die entsprechenden Treffer. Darum bin ich ja auch für die AND (!) - Verknüpfung. Um die Suchmenge eben immer weiter einzuschränken.

Sicherlich macht es u.U. Sinn, den SQL-Befehl erst zusammenzubauen. Aber was machst du jetzt, wenn es 18 Suchfelder sind? Und dann kommen auf einmal noch 5 dazu? Das ist ein recht großer Pflegeaufwand, während du auf der anderen Seite nur den Select-Befehl selbst anpassen musst.

Performance-technisch ist es natürlich besser, den Befehl speziell zusammenzubauen, zumindest bei sehr großen Tabellen. Dazu hab ich bisher aber nichts gehört :-)
 
Ich habe mal ein Beispiel gemacht, das ganz sicher nicht funktioniert, nur damit du siehst wie in etwa ich das meine:
PHP:
$felder = array( 0 => 'vorname', 1 => 'nachname', 2 => 'nickname', 3 => 'wohnort', 4 => 'geschlecht' );
$count = count( $felder );
$tmp = 'SELECT * FROM';
for( $i = 0, $i < $count; $i++ )
{
    if( !empty( $_POST[$felder[$i]] ) || $_POST[$felder[$i]] != '' )
    {
        $tmp .= $felder[$i]. ' LIKE "%' .$_POST[$felder[$i]]. '%"';
        if( $i != $count - 1 )
        {
            $tmp .= ' AND';
        }
    }
}
So müsste man nur das Array $felder erweitern, wenn man mehr Suchfelder haben will.

//edit: das WHERE fehlt gänzlich zum Beispiel ^^
 
Zuletzt bearbeitet:
@shutdown:logisch gesehen bist du auf der ganz falschen Spur: http://de.wikipedia.org/wiki/Wahrheitstabelle
Denn die Definition lautet auch zum Logischen UND: Y ist 1 wenn a=1 und b=1

? Wieso ist shutdown dann auf der falschen Spur ? Das entspricht doch genau der Wahrheitstabelle. Erste Bedingung = leer also wahr ergo alle Einträge; zweite Bedingung nur wahr wenn bedingung erfüllt ist von den Restlichen (also allen Einträgen). Entspricht meiner Logik nach genau der Wahrheitstabelle.
Das einzige Problem ist eben das Perfomance-Problem bei großen Tabellen. Aber wenn die Tabelle nur wenige Einträge hat ist das kein Problem.
 
Zurück