Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] MySQL Abfrage mit PHP-Variablen AND Verknüpfung

Einklappen

Neue Werbung 2019

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

  • [Erledigt] MySQL Abfrage mit PHP-Variablen AND Verknüpfung

    Hallo,

    ich habe ein Suchformular mit ausschließlich SELECT-Feldern die ich mit Javascript aktivieren oder deaktivieren kann. Wenn ich das Formular abschicke prüfe ich mittels if(is_null) ob das Selectfeld aktiviert oder deaktiviert war.

    In meiner Abfrage an die MySQL-DB möchte ich nun in der WHERE-Klausel die aktivierten Felder mit AND verknüpfen, leider bekomme ich das nicht so hin da ich immer ein AND zuviel habe. Ich bin mir auch sicher wenn man sich meinen Code anschaut das es bestimmt einfache zu schreiben ist.

    PHP-Code:
    if(is_null($lagerort))
    {
        
    $lagerort "";
    }else{
        
    $lagerort "te.id_lagerort = $lagerort";
        
    $lobedingung " AND ";
    }

    if(
    is_null($hersteller))
    {
        
    $hersteller "";
    }else{
        
    $hersteller "te.id_hersteller = $hersteller";
        
    $hebedingung " AND ";
    }

    if(
    is_null($textilart))
    {
        
    $textilart "";
    }else{
        
    $textilart "te.id_textilart = $textilart";
        
    $tabedingung " AND ";
    }

    if(
    is_null($geschlecht))
    {
        
    $geschlecht "";
    }else{
        
    $geschlecht "te.id_geschlecht = $geschlecht";
        
    $gebedingung " AND ";
    }

    if(
    is_null($groessen))
    {
        
    $groessen "";
    }else{
        
    $groessen "te.id_groessen = $groessen";
        
    $grbedingung " AND ";
    }

    if(
    is_null($farben))
    {
        
    $farben "";
    }else{
        
    $farben "te.id_farben = $farben";
    }

    echo
    "
    SELECT
        te.id, te.id_lagerort, te.id_hersteller, te.id_textilart, te.id_geschlecht, te.id_groessen, te.id_farben, SUM(anzahl) AS anzahl,
        lo.id AS lagerortid, lo.lagerort,
        he.id AS herstellerid, he.hersteller,
        ta.id AS textilartid, ta.textilart,
        ge.id AS geschlechtid, ge.geschlecht,
        gr.id AS groessenid, gr.groessen,
        fa.id AS farbenid, fa.farben
    FROM
        tl_textilien AS te
    LEFT JOIN
        tl_lagerorte AS lo
    ON
        lo.id = te.id_lagerort
    LEFT JOIN
        tl_hersteller AS he
    ON
        he.id = te.id_hersteller
    LEFT JOIN
        tl_textilart AS ta
    ON
        ta.id = te.id_textilart
    LEFT JOIN
        tl_geschlecht AS ge
    ON
        ge.id = te.id_geschlecht
    LEFT JOIN
        tl_groessen AS gr
    ON
        gr.id = te.id_groessen
    LEFT JOIN
        tl_farben AS fa
    ON
        fa.id = te.id_farben                
    WHERE
        
    $lagerort $lobedingung $hersteller $hebedingung $textilart $tabedingung $geschlecht $gebedingung $groessen $grbedingung $farben
    ORDER BY
        lo.lagerort ASC, he.hersteller ASC, ta.textilart ASC"

    Liebe Grüße
    Maik


  • #2
    Benutze statt einzelnen Variablen ein Array und implode() , das löst zumindest dieses Problem.

    Kommentar


    • #3
      Ich würds ehr so machen:

      PHP-Code:

      $where 
      "";

      if(!
      is_null($spalte_1)){
          if(!empty(
      $where)) $where .= ' AND '// trifft nicht zu da $where leer ist
          
      $where .= "a.spalte_1 = '".$spalte_1."'";
      }

      if(!
      is_null($spalte_2)){
          if(!empty(
      $where)) $where .= ' AND '// jetzt trifft es zu da $where a.spalte_1 = 'ABCD' enthält
          
      $where .= "a.spalte_2 = '".$spalte_2."'";
      }

      if(!
      is_null($spalte_3)){
          if(!empty(
      $where)) $where .= ' AND '// siehe spalte_2 kommentar :-)
          
      $where .= "a.spalte_3 = '".$spalte_3."'";

      Dein SQL passt du so an ->
      Code:
      WHERE
          $where
      ORDER BY

      Kommentar


      • #4
        Meine Variante ist aber deutlich kürzer und (mit Verlaub) eleganter

        Kommentar


        • #5
          Vielen Dank euch beiden für eure Lösungsansätze.
          @cycap
          Mit einem Array habe ich auch schon gespielt, jedoch war mir da auch nicht klar wohin mit dem AND und wie prüfe ich ob die nachfolgende variable null ist? Vielleicht denke ich einfach nur zu kompliziert.

          @der_robert
          Deine Lösung passt und funktioniert, auf den ersten Blick hatte ich zwar vermutet das dass genauso in die Hose geht aber habs dann geschnallt, perfekt.

          Liebe Grüße
          Maik

          Kommentar


          • #6
            Zitat von Zero2000 Beitrag anzeigen

            In meiner Abfrage an die MySQL-DB möchte ich nun in der WHERE-Klausel die aktivierten Felder mit AND verknüpfen, leider bekomme ich das nicht so hin da ich immer ein AND zuviel habe.

            Definiere Deine Coditions mit " and ...<condition> " und das WHERE mit "where 1=1 ". Dann kannst Du bis Nikolaus dann Deine Conditions drankleben.
            PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

            Kommentar


            • #7
              Zitat von Zero2000 Beitrag anzeigen
              @cycap
              Mit einem Array habe ich auch schon gespielt, jedoch war mir da auch nicht klar wohin mit dem AND und wie prüfe ich ob die nachfolgende variable null ist? Vielleicht denke ich einfach nur zu kompliziert.
              PHP-Code:
              if(!is_null($geschlecht)) 

                 
              $whereArray[] = "te.id_geschlecht = $geschlecht"


              if(!
              is_null($groessen)) 

                 
              $whereArray[] = "te.id_groessen = $groessen"


              // ...

              $where implode(" AND ",$whereArray);
              $sql "SELECT ... WHERE $where ..."

              Kommentar

              Lädt...
              X