ORDER BY geht nicht? mit Where 1=1

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

  • ORDER BY geht nicht? mit Where 1=1

    Guten Morgen,
    Bis hierher konnte ich so schön selektieren:
    PHP-Code:

    $select 
    'SELECT DISTINCT ID,  Artikelname, VKpreis';
    $from   ' FROM naviartikel';
    $where  ' WHERE 1=1';


    $gid $_POST['gid'];
    if (
    $gid != '') { // Es wurde eine Gruppe ausgewählt
      
    $where .= " AND GID='$gid'";
    }

    $searchtext $_POST['searchtext'];
    if (
    $searchtext != '') { // Es wurde ein Suchtext eingegeben
      
    $where .= " AND Artikelname LIKE '%$searchtext%'";
    }
    ?> 
    wenn ich aber jetzt in der zweiten Zeile eingebe:
    PHP-Code:
    $from   ' FROM naviartikel ORDER BY Artikelname'
    wird ...where 1 = 1... angemeckert.

    Nehme ich diese Klausel raus, wird schön sortiert,
    aber nicht mehr nach Gruppen bzw. Suchtext.

  • #2
    ORDER BY kommt HINTER die WHERE Klausel.

    Kommentar


    • #3
      vielen Dank prego, aber:

      es wird auch hier wieder nach der ersten $where
      schön sortiert, aber nicht mehr die Gruppen
      nach Artikelnamen bzw. nur der gesuchte Text nach Namen.
      Meine Antwort hat etwas länger gedauert, weil ich
      inzwischen auch ORDER BY.. zusätzlich mit den zwei anderen $where
      ausprobiert habe (ohne Erfolg)
      PHP-Code:
      $select 'SELECT DISTINCT ID,  Artikelname , VKpreis';
      $from   ' FROM naviartikel ';
      $where  ' WHERE 1=1 ORDER BY Artikelname ';


      $gid $_POST['gid'];
      if (
      $gid != '') { // Es wurde eine Gruppe ausgewählt
        
      $where .= " AND GID='$gid'";
      //$where .= " AND GID='$gid' ORDER BY Artikelname";
      }

      $searchtext $_POST['searchtext'];
      if (
      $searchtext != '') { // Es wurde ein Suchtext eingegeben
        
      $where .= " AND Artikelname LIKE '%$searchtext% '";
      //$where .= " AND Artikelname LIKE '%$searchtext% 'ORDER BY.....
      }
      ?> 

      Kommentar


      • #4
        order by hat nichts mit where zu tun.

        Code:
        SELECT * FROM tab1 
        ORDER BY nachname, vorname
        würde zuerst nach nachname und abhängig nach vorname sortieren

        Kommentar


        • #5
          danke prego,

          ich denke, dass mir Deine Antwort weiterhilft.

          (die Umsetzung dauert aber bei mir noch etwas)

          dankeschön
          Gruss Pepsi

          Kommentar


          • #6
            entschuldigt, ich nerve
            aber ohne "ORDER BY usw"
            war die unsortierte Welt noch in Ordnung!


            PHP-Code:


            mein neuer Anlauf:
            <?php
            $select 
            'SELECT DISTINCT naviartikel.ID,  Artikelname';
            $from   ' FROM naviartikel ORDER BY `Artikelname` ASC ';
            $where  ' WHERE 1=1';
            ?>
            Fehlermeldungen:
            for the right syntax to use near 'WHERE 1=1' 
            at line 1
            nehme ich where 1=1 mal raus!
            bekomme aber jetzt: for the right syntax to use near 'AND GID='4'' 
            at line 1 

            so ginge es weiter:
            <?php
            $gid 
            $_POST['gid'];

            if (
            $gid != '') { // Es wurde eine Gruppe ausgewählt
              
            $where .= " AND GID='$gid'";
            }

            $searchtext $_POST['searchtext'];
            if (
            $searchtext != '') { // Es wurde ein Suchtext eingegeben
              
            $where .= " AND Artikelname LIKE '%$searchtext%'";
            }
            ?>
            ich brauche nur Artikelname = Vorname sortiert
            und das klappt auch, aber dann die if-Anweisung:
            (zur Sicherheit im phpmyadmin die Abfrage
            nur nach der Gruppe:
            SELECT `Artikelname`
            FROM `naviartikel`
            WHERE `Artikelgruppe` LIKE CONVERT( _utf8 'xyz'
            USING latin1 )
            COLLATE latin1_general_ci
            ORDER BY `Artikelname` ASC)

            Kommentar


            • #7
              ORDER BY hinter! die AND-abfragen

              gruß
              peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                Du kannst immer das ganze sql mit echo ausgeben, dann siehst Du wie die vollständige zusammengebaute query lautet. Noch besser ist, das $sql zuerst zusammenzufügen, dann echo, dann mysql_query($sql)....

                Man muss noch wissen, dass die Klauseln in einer festen Reihenfolge, nämlich (SELECT FROM WHERE ORDER) sein müssen und nicht in beliebiger freier Reihenfolge.

                Kommentar


                • #9
                  bitte verwende das Wort 'Vorname' nicht bzw. erkläre was es mit Artikelname zu tun hat. Thx.

                  Kommentar


                  • #10
                    erstmal die eine Antwort:
                    ich hatte den Rat von prego mit vorname/nachname
                    mit einbezogen (war nicht gut)

                    Kommentar


                    • #11
                      danke gleiwitz19

                      jetzt ist es wirlich sonnenklar mit der Reihenfolge.

                      (laufend wurde mir das ja auch geraten)

                      aber es fällt mir immernoch schwer
                      ORDER BY Artikelname "dahinter" unterzubringen:

                      so etwa?
                      $where =.....
                      $order = 'Order BY Artikelname';

                      das probiere ich jetzt jedenfalls aus.

                      Gruss Pepsi

                      Kommentar


                      • #12
                        Original geschrieben von pepsi
                        $where =.....
                        $order = 'Order BY Artikelname';

                        das probiere ich jetzt jedenfalls aus.
                        Die Reihenfolge der Befehlsteile$where und $order im php ist natürlich egal. Wichtig ist wie es für $sql zusammengesetzt wird. Ich würde direkt das $sql aufbauen und die Teile $where $order nicht einzeln machen.

                        $sql = 'select distinct naviartikel.id, artikelname from naviartikel ';
                        $sql .= ' where 1=1';
                        if ($gid) $sql .=" and GID ='$gid' ";
                        if($searchtext) $sql .=" and artikelname LIKE '%searchtext%' ";
                        $sql .= ' order by artikelname';

                        echo "sql=$sql<br />";

                        Die backticks würde ich bei so was einfachem auch nicht schreiben. Obiges ist gleichwertig und viel weniger kompliziert.

                        Kommentar


                        • #13
                          oh danke Gleiwitz19, es hat wahrhaftig geklappt.

                          Die backticks hatte ich auch schon weggelassen.

                          Beim Suchen nach Lösungen im Internet habe ich auch
                          schon bemerkt, dass kaum einer $select und $from usw. schreibt.

                          Deshalb auch noch besonderen Dank für die elegantere Lösung.

                          Dankeschön

                          Gruss Pepsi

                          Kommentar

                          Lädt...
                          X