und | oder abfrage

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • und | oder abfrage

    hallo,
    wenn ich ein formular mit 4 checkboxen [test1, test2, test3, test4] habe die man wählen kann möchte ich nun gerne eine und | oder afrage machen, dass man an einem 'radio' [suchmuster: und, oder] anklickt.

    nun möchte ich mit:
    --------------------------

    if ($suchmuster == "oder")
    {
    SELECT * FROM tabelle WERE diegewähltendinge mit oder
    }

    if ($suchmuster == "und")
    {
    SELECT * FROM tabelle WERE diegewähltendinge mit und
    }

    auslesen. gibt es eine einfach möglichkeit die gewählten variablen abzufragen und mit AND oder OR zu verknüpfen ohne zig-if abfragen zu machen?

    vielen dank schon einmal :-)

  • #2
    also mein problem bei der ganzen sache ist einfach. wenn ich nun z.b. test1 und test4 und die UND verknüpfung anwähle dann muss die abfrage ja

    ...WHERE test1 = '$test1' AND test4 = '$test4';

    lauten. wenn ich nun test1, test2, test4 wähle dann muss ich ja die abfrage wiederum anderst machen und wenn und wenn ich nun alle 4 wähle wieder und wenn ich nun alles mit ODER mache wieder usw usw.
    und somit müsste ich ja für jede verknüpfung 16 if abfragen machen da es ja jeweils 16 möglichkeiten gibt. aber dort wird es doch wohl einen trick oder auch eine elegantere möglichkeit geben oder?

    wäre super wenn das jemand wüßte. danke

    Kommentar


    • #3
      so müsste es gehen (vielleicht geht es noch einfacher? keine ahnung!):

      if ($suchmuster == "oder")
      {
      $x = 0;
      $querywhere = "";
      if ($test1) {$querywhere.= "test1 = $test1"; $x++;}
      if ($test2) {if ($x) {$querywhere.= " OR test2 = $test2"; $x++;} else {$querywhere.= "test2 = $test2"; $x++;}}
      if ($test3) {if ($x) {$querywhere.= " OR test3 = $test3"; $x++;} else {$querywhere.= "test3 = $test3"; $x++;}}
      if ($test4) {if ($x) {$querywhere.= " OR test4 = $test4"; $x++;} else {$querywhere.= "test4 = $test4"; $x++;}}

      mysql_query("SELECT * FROM tabelle WHERE $querywhere");
      }

      if ($suchmuster == "und")
      {
      $x = 0;
      $querywhere = "";
      if ($test1) {$querywhere.= "test1 = $test1"; $x++;}
      if ($test2) {if ($x) {$querywhere.= " AND test2 = $test2"; $x++;} else {$querywhere.= "test2 = $test2"; $x++;}}
      if ($test3) {if ($x) {$querywhere.= " AND test3 = $test3"; $x++;} else {$querywhere.= "test3 = $test3"; $x++;}}
      if ($test4) {if ($x) {$querywhere.= " AND test4 = $test4"; $x++;} else {$querywhere.= "test4 = $test4"; $x++;}}

      mysql_query("SELECT * FROM tabelle WHERE $querywhere");
      }

      mfG
      Guido

      Kommentar


      • #4
        vielen dank. das funktioniert

        Kommentar


        • #5
          hallo, ein kleines problem ist mir leider nun noch aufgefallen. aber das ist wohl ein generelles problem:

          wenn ich eine abfrage

          $query = "SELECT * FROM tablle1 AS a JOIN tablle2 AS b JOIN tablle3 AS c WHERE c.jahr = '1971' AND b.bla = 'bla' OR b.bla2 = 'bla2' AND a.test = 'Ja'";

          dann gibt er mir trotzdem eine ausgabe aus obwohl das jahr gar nicht zutrifft.

          der ignoriert die AND einfach. gibt es dafür auch eine lösung, dass er zwar schaut ob die OR bedinung stimmt aber zugleich die AND bedingungen auch eintreten müssen?

          Kommentar


          • #6
            Ich hab mal so einen ähnlichen Fall gehabt ich ha einfach abgefrag was gesetzt war bzw. nicht gesetzt war!

            Vielleicht hilfts dir ja es baut dir direkt die SQL ANweisung da zusammen die brauchst mußt es nur noch anpassen auf deine Bedürfnisse!

            <?php



            $emptycounter=0;

            if ($Vornameread)
            {
            $sqlarray[1]= "(vorname LIKE '$Vornameread%')";
            $emptycounter++;
            }

            if ($Nameread)
            {
            $sqlarray[2]= "(name LIKE '$Nameread%')";
            $emptycounter++;
            }

            if ($Fktread)
            {
            $sqlarray[3]= "(funktion LIKE '$Fktread%')";
            $emptycounter++;
            }

            if ($Telefonread)
            {
            $sqlarray[4]= "(telefon LIKE'$Telefonread%')";
            $emptycounter++;
            }

            if ($Mobilread)
            {
            $sqlarray[5]= "(mobil LIKE '$Mobilread%')";
            $emptycounter++;
            }

            if ($Emailread)
            {
            $sqlarray[6]= "(email LIKE '$Emailread%')";
            $emptycounter++;
            }

            if ($Strasseread)
            {
            $sqlarray[7]= "(strasse LIKE '$Strasseread%')";
            $emptycounter++;
            }

            if ($PLZread)
            {
            $sqlarray[8]= "(plz LIKE '$PLZread%')";
            $emptycounter++;
            }

            if ($Ortread)
            {
            $sqlarray[9]= "(ort LIKE '$Ortread%')";
            $emptycounter++;
            }

            if ($Raumread)
            {
            $sqlarray[10]= "(raum LIKE '$Raumread%')";
            $emptycounter++;
            }

            if ($Vertretungread)
            {
            $sqlarray[11]= "(vertretung LIKE '$Vertretungread%')";
            $emptycounter++;
            }

            if ($Bereichread)
            {
            $sqlarray[12]= "(bereich LIKE '$Bereichread%')";
            $emptycounter++;
            }


            if ($emptycounter==0)
            {
            die ("ERROR: Sie müssen mindestens ein Feld ausfüllen, benutzen Sie die zurück Taste Ihres Browsers und füllen Sie die gewünschten Felder aus!");
            }


            else

            {

            $varsqland = implode (" AND ", $sqlarray);

            $varsqlmulti[1]=$varsqland;
            $varsqlmulti[2]="ORDER BY name ASC";

            $varsql = implode (" ", $varsqlmulti);
            }



            Und $varsql enthält nun den Fertig zusammengebauten String!

            ?>

            Kommentar


            • #7
              ich habe es mit einer ganz einfachen lösung gemacht. einfach bei der oder bedingung eine klammer gesetzt

              Kommentar

              Lädt...
              X