Thomas R: platzhalter in mysql abfrage

Hallo Leute ich habe mal eine spezielle Frage:

->SELECT * FROM kunde WHERE gender='$gender' and name='$name' <-

das führe ich aus wenn ich aus einer User Liste bestimmte User mit Geschlecht und Namen haben möchte!

Was ist aber wenn ich nochmal Auswahlkriterien verwende, diese aber im Formular anbiete diese aber leer gelassen werden ....

das heißt es würde dann

->SELECT * FROM kunde WHERE gender='$gender' and name=NULL <-

wie kann ich das lösen, das wenn ich 10 Kriterien habe, man aber eventuell nur nach 2 oder 3 Suchen bzw anzeigen lassen will.

Denn im Prinzip würde es ja  mit allen Kriterien so aussehen :

->SELECT * FROM kunde WHERE gender='$gender' and $auswahl1='§postauswahl1' and $auswahl2='§postauswahl2' and $auswahl3='§postauswahl3' and ....<-

MFG TR

  1. Hi,

    wie kann ich das lösen, das wenn ich 10 Kriterien habe, man aber eventuell nur nach 2 oder 3 Suchen bzw anzeigen lassen will.

    indem Du das richtige Statement zur Laufzeit generierst.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. indem Du das richtige Statement zur Laufzeit generierst.

      das heißt bei 10 Auswahlkriterien und einer Kobination von max 10 minimal 1ner Auswahl 100 Möglichkeiten und somit 100 Statements ?

      Meinst du das ?
      Danke für die zügige Antwort !!!

      MFG TR

      1. Hi,

        das heißt bei 10 Auswahlkriterien und einer Kobination von max 10 minimal 1ner Auswahl 100 Möglichkeiten und somit 100 Statements ?

        es sind bei zehn Kriterien 1024 Statements, aber sonst ja.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. No other way?

          das wenn ich prüfe ob die variable leer ist dann in der select anweisung einfach etwas übergehe ? NO WAY ?

          1. Hi,

            No other way?

            the best way. Wo ist Dein Problem damit?

            das wenn ich prüfe ob die variable leer ist dann in der select anweisung einfach etwas übergehe ? NO WAY ?

            Ach Himmel, mit boole'scher Algebra kannst Du auch z.B. "... AND (bla = '$bla' OR '$bla' = '')" sagen, aber das ist verhältnismäßig sinnarm. Generier einfach das optimale Statement.

            Cheatah

            --
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. the best way. Wo ist Dein Problem damit?

              das ich einen Kloß im Hals hatte, zu erfahren das ich dann 1024 Statements erstellen muss !!

              da werde ich nicht drumrum kommen!?

              MFG TR

              1. Hi,

                das ich einen Kloß im Hals hatte, zu erfahren das ich dann 1024 Statements erstellen muss !!

                musst Du nicht, sondern nur eine Generierung.

                Cheatah

                --
                X-Will-Answer-Email: No
                X-Please-Search-Archive-First: Absolutely Yes
                1. musst Du nicht, sondern nur eine Generierung.

                  na wie jetzt?
                  Kannst du mir nicht genauer weiterhelfen, was da stehen sollte, bzw muss ?

                  :-(

                  MFG

                  1. Hi,

                    musst Du nicht, sondern nur eine Generierung.
                    na wie jetzt?

                    wieso? Ich habe die ganze Zeit von nichts anderem geredet.

                    Kannst du mir nicht genauer weiterhelfen, was da stehen sollte, bzw muss ?

                    Nein. Wenn Du mir sagst, wo Dein Problem damit liegt, kann ich aber vielleicht helfen, dieses auszuräumen.

                    Cheatah

                    --
                    X-Will-Answer-Email: No
                    X-Please-Search-Archive-First: Absolutely Yes
  2. Hallo Thomas,

    Das soll nur mal eine Art Lösungsansatz sein, ist also ungetestet, aber so in der Richtung sollte es funktionieren.
    Du kannst Dir Dein SQL-Query dynamisch zusammenbauen in dem Du zuerst checkst ob der Parameter existiert, also als Auswahlkriterium in Frage kommt. Sollte dies der Fall sein wird der Teilstring einem Array hinzugefügt:

    //Parameterübergabe:

    if( isset($_POST["gender"]) ) $gender = $_POST["gender"];
    else $gender = "";

    //Check ob Variable Wert enthält:

    if( isset($gender) )
    {
      $sql_arr[] = "gender='" . $gender . "'";
    }
    usw... für alle Parameter

    // Ist das das Array grösser als 1 wird der Inhalt per implode()
    // durch AND verkettet, ansonsten gibt es halt nur einen Wert...

    if( sizeof($sql_arr) > 1 )
    {
      $sql_part = implode(" AND ", $sql_arr);
    }
    else
    {
      $sql_part = $sql_arr[0];
    }

    // Danach wird der Teilstring an das SQL-Query drangehängt und
    // entsprechend weiterverarbeitet...

    $sql = "SELECT * FROM kunde WHERE . sql_part;

    Vielleicht bringt Dich das ein wenig weiter?
    Gruss AndreD