Zu viele Möglichkeiten :(

BeaTBoxX

Erfahrenes Mitglied
Hallo zusammen,

eventuell kann mir jemand von euch einen cleveren Tip geben (Sofern das überhaupt möglich ist)

Ich habe eine Suchmaschine für eine Datenbank programmiert.

Zum Suchen, laesst sich das Ergebnis anhand von max. 5 Kriterien eingrenzen.
Diese Kriterien können gesetzt sein, müssen aber nicht.
Daraus ergeben sich 5Bit Möglichkeiten in welcher Konstellation die Kritterien auftreten anhand von welchen ich dann ein Sql Query formulieren muss.

Gibt es eine andere Möglichkeit, als die 25 Kombinationen alle mit solchen abfragen zu unterscheiden?

PHP:
if (!isset(option1) && !isset(option2) && !isset(optio3) && !isset(option4) && !isset(option5)) ) // entspricht kombination 00000
    $sqlqry= "query fuer kombi 00000"
..
elseif( isset() .. && ..)  // entspricht kombination 00001
    $sqlqry= "query fuer kombi 00001"
..
..
// bis kombination 11111

Ich komm grade auf keine Idee wie man das irgendwie intelligenter machen koennte.

Vielen Dank

Gruß
Frank
 
Ja gibts ;)

du musst den Query String ensprechend erweitern.

PHP:
$SQL = "SELECT foo, bar from foobar where";

$first_where = true;
if(isset($opt1)){
    $SQL .= (!$first_where) ? ' and ' : '' . sprintf("feld1 = '%s'",$opt1);
    $first_where = false;
}

if(isset($opt2)){
    $SQL .= (!$first_where) ? ' and' : '' . sprintf(" feld2 = '%s'",$opt2);
    $first_where = false;
}
.
.
.

mysql_query() kommt dann nach den 5 If´s ...
 
Wenn ich das richtig sehe, dann gibst du bei deinen Auswahlen die Möglichkeit zwischen 0 und 1.

Dann würde ich vorschlagen, dass du dein Query so gestaltest (deine Werte erhältst du ja über POST oder ähnliches)

SELECT * FROM `table` WHERE `spalte1` = 'option1' AND `spalte2` = 'option2' AND usw.

Deine Suchergebnisse werden dann so erzeugt, dass man über deine Einträge in der Datenbank hingeführt wird.

shutdown
 
Beides nicht wirklich elegant.

Besser ist du packst das ganze in eine nette Collection. Sprich Key des Arrays ist der Tabellenname und Inhalt das jeweilige Value

PHP:
$params  = array ( "firstName"  => "'Chris'", "LastName" => "'Fein'", "age"=>"28");

$i = 1;
$sql = "SELECT foo,bar FROM foobar "
if(count($params) >0) $sql.= " WHERE ";
foreach ($params as $coloumn => $value ) { 
    $sql.=$coloumn." = ".$value;
    if(!$i==count($params)) $sql.=" AND ";
}
 
Suuper, hat funktioniert ! Vielen Dank

Allerdings erst nach einer kleinen Änderung:

PHP:
$sql = "SELECT faq_daten.id, faq_daten.titel,faq_daten.vip,faq_daten.sysadmin,faq_daten.text FROM `faq_daten` JOIN `faq_kategorien` ON faq_daten.kategorie = faq_kategorien.id";

if(count($params) >0) $sql.= " WHERE ";
foreach ($params as $coloumn => $value ) {
    $sql.=$coloumn." = ".$value;
    if(!($i++==count($params))) $sql.=" AND ";
}

1. hab ich das $i noch inkrementieren lassen, damit das script merkt, wann es beim letzten element angekommen ist und KEIN "AND" mehr dranhaengt.

2. Hab ich noch eine Klammerung gesetzt vor der Negierung if ( !( ..==..) )

Danke nochmals :-)

Gruß
Frank
 
Zurück