Ankündigung

Einklappen
Keine Ankündigung bisher.

Sortieren (ORDER BY) nach INNER JOIN

Einklappen

Neue Werbung 2019

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

  • Sortieren (ORDER BY) nach INNER JOIN

    Hallo,

    ich muss vorausschicken, dass ich mit SQL nicht so bewandert bin. Einfache Datenbankabfragen kriege ich hin, aber INNER JOIN habe ich vor einer halben Stunde zum ersten Mal gehört .
    Ich habe eine Kundendatenbank bekommen, bei der die Ausgabe bisher nach Kundennummer erfolgt ist und jetzt soll nach Namen sortiert werden.

    Die Abfrage sieht folgendermaßen aus:
    Code:
    $sqlstat         = "SELECT
                        $Kunden_Eintraege.DSNUMMER,
                        $Kunden_Eintraege.name,
                        $Kunden_Eintraege.plz,
                        $Kunden_Eintraege.ort,
                        $Kunden_Eintraege.Strasse_1,
                        $Kunden_Eintraege.Strasse_2,
                        $Kunden_Eintraege.Land,                    
                        $Branchen.Kurzbezeichnung
                        FROM $Kunden_Eintraege
                        INNER JOIN $Kunden_Verzeichnis ON $Kunden_Eintraege.DS_Kundenverzeichnis = $Kunden_Verzeichnis.DSNUMMER
                        INNER JOIN $Branchen ON $Branchen.DSNUMMER = $Kunden_Eintraege.DS_Branche
                        LIMIT 100                    ";
    Ich hab' versucht, die Sortierung per
    Code:
    ORDER BY $Kunden_Eintraege.name
    zu erreichen, danach wird mir gar nichts mehr angezeigt (Keine Datensätze gefunden). Also stimmt vermutlich der Variablenname nicht. Muss der in einer bestimmten Form geschrieben werden? Kann jemand schon anhand dieser kurzen Codeauszüge erkennen woran es hapert? Ich bin für jede Hilfe dankbar.

  • #2
    Wo hast du dieses Teil eingefügt? Die Reihenfolge der Elemente eines SELECT-Befehls muss eingehalten werden!
    So nebenbei: normalerweise macht es keinen Sinn, Tabellennamen in Varibalen zu speichern; aber das hat nichts mit dem Problem zu tun.

    Kommentar


    • #3
      Wie gesagt, das Ganze ist nicht von mir, ist schon ein paar Jahre alt und ich soll es jetzt ändern.

      eingefügt habe ich es so:
      Code:
      $sqlstat         = "SELECT
                          $Kunden_Eintraege.DSNUMMER,
                          $Kunden_Eintraege.name,
                          $Kunden_Eintraege.plz,
                          $Kunden_Eintraege.ort,
                          $Kunden_Eintraege.Strasse_1,
                          $Kunden_Eintraege.Strasse_2,
                          $Kunden_Eintraege.Land,                    
                          $Branchen.Kurzbezeichnung
                          FROM $Kunden_Eintraege
                          INNER JOIN $Kunden_Verzeichnis ON $Kunden_Eintraege.DS_Kundenverzeichnis = $Kunden_Verzeichnis.DSNUMMER
                          INNER JOIN $Branchen ON $Branchen.DSNUMMER = $Kunden_Eintraege.DS_Branche
                          ORDER BY $Kunden_Eintraege.name
                          LIMIT 100";

      Kommentar


      • #4
        Ich sehe jetzt keinen Fehler.
        Lass dir mal mit
        PHP-Code:
        echo $sqlstat
        die Abfrage ausgeben und teste sie mit phpmyadmin.

        Kommentar


        • #5
          phpMyAdmin macht's richtig. Woran kann es denn jetzt noch liegen? Ich bin völlig verwirrt.

          Kommentar


          • #6
            Dann zeig doch mal die evaluierte Abfrage!

            Kommentar


            • #7
              Meinst Du das hier?
              Code:
              SELECT GBB_Kunden_Eintraege.DSNUMMER, GBB_Kunden_Eintraege.name, GBB_Kunden_Eintraege.plz, GBB_Kunden_Eintraege.ort, GBB_Kunden_Eintraege.Strasse_1, GBB_Kunden_Eintraege.Strasse_2, GBB_Kunden_Eintraege.Land, GBB_Branchen.Kurzbezeichnung FROM GBB_Kunden_Eintraege INNER JOIN GBB_Kunden_Verzeichnis ON GBB_Kunden_Eintraege.DS_Kundenverzeichnis = GBB_Kunden_Verzeichnis.DSNUMMER INNER JOIN GBB_Branchen ON GBB_Branchen.DSNUMMER = GBB_Kunden_Eintraege.DS_Branche WHERE GBB_Kunden_Eintraege.aktiv ='1' AND GBB_Kunden_Verzeichnis.aktiv='1' AND GBB_Kunden_Eintraege.EXP_DATE > '1240309301' AND GBB_Branchen.Kurzbezeichnung = 'Hotel, Hotels' ORDER BY GBB_Kunden_Eintraege.name LIMIT 100
              Ich hab' allerdings mal ein paar andere Dinge ausprobiert. Wenn die Ausgabe bei phpMyAdmin funktioniert, dann vermute ich mal, dass die Ausgabe im Script nicht stimmt, bzw. angepasst werden muss. Die sieht zur Zeit so aus:

              Code:
              $db             = do_connectdb();
                  $res            = mysql_db_query(DB, $sqlstat, $db);
                  $num            = mysql_num_rows($res);
                  if ($num >0)
                  {
                      for ($i=0; $i < $num; $i++)
                      {
                          $dsnummer[$i]    = mysql_result($res, $i, "$Kunden_Eintraege.DSNUMMER");
                          $name[$i]        = mysql_result($res, $i, "$Kunden_Eintraege.name");
                          $land[$i]        = mysql_result($res, $i, "$Kunden_Eintraege.land");
                          $strasse_1[$i]    = mysql_result($res, $i, "$Kunden_Eintraege.Strasse_1");
                          $strasse_2[$i]    = mysql_result($res, $i, "$Kunden_Eintraege.Strasse_2");            
                          $plz[$i]        = mysql_result($res, $i, "$Kunden_Eintraege.plz");
                          $ort[$i]        = mysql_result($res, $i, "$Kunden_Eintraege.ort");
                          $branche[$i]    = mysql_result($res, $i, "$Branchen.Kurzbezeichnung");
                      }
                      do_disconnectdb($db);
              Dabei habe ich mir mal per echo die Variable $num ausgeben lassen und siehe da: Ohne ORDER BY hat sie einen Wert, mit keinen, also wird die Schleife nicht ausgeführt. Hilft das bei der Fehlersuche weiter?

              Kommentar


              • #8
                Welche Ausgabe erhälst Du mit
                PHP-Code:
                $db do_connectdb();
                mysql_select_db(DB$db) or die(mysql_error());

                echo 
                '<pre>Debug: sqlstat='$sqlstat'</pre>';
                $res mysql_query($sqlstat$db) or die(mysql_error());

                echo 
                '#Ergebnisse: 'mysql_num_rows($res), "<br />\n";
                while ( 
                false!==($row=mysql_fetch_array($resMYSQL_ASSOC)) ) {
                    echo 
                'ds: 'join(', '$row);
                }
                do_disconnectdb($db); 

                Kommentar


                • #9
                  Ich bin mir ganz sicher, dass es nicht am ORDER BY liegt. Da muss was anderes auch noch geändert worden sein.
                  Und noch zu deinen DB-Funktionen (das ist allerdings nicht das Problem)

                  Kommentar


                  • #10
                    Zitat von David Beitrag anzeigen
                    Welche Ausgabe erhälst Du mit
                    PHP-Code:
                    .... 
                    Gar keine, bzw. einen weißen Bildschirm Was genau sollte das denn bewirken?

                    Hat einer von Euch eine Idee, warum $num einen Wert hat, wenn die Ausgabe unsortiert ist und keinen, wenn sie sortiert wird? Ich mein', die Anzahl der Zeilen sollte sich doch eigentlich nicht ändern, oder versteh' ich da was falsch? Und nein, @lazydog, ich habe nichts anderes gemacht, als diese ORDER BY zeile einzuschieben.

                    Kommentar


                    • #11
                      Gar keine, bzw. einen weißen Bildschirm
                      Das klingt nach einem parse error. Der ist aber nicht in meinem Codeausschnitt.

                      Kommentar

                      Lädt...
                      X