[SQL allgemein] LEFT OUTER JOIN klappt nicht

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

  • [SQL allgemein] LEFT OUTER JOIN klappt nicht

    Guten Morgen Usergemeinde, ich komm einfach nicht weiter, sitze schon die ganze Nacht dran und bin nun hier gelandet, in der Hoffnung, hier eine Lösung zu finden.

    Ich habe zwei Tabellen mit LEFT JOIN verbunden, es klappt auch prima, nur die Daten sehen so aus:

    +++++++++++
    | Heft1 | Titel1 |
    | Heft1 | Titel2 |
    | Heft2 | Titel1 |
    | Heft2 | Titel2 |
    | Heft2 | Titel2 |
    +++++++++++

    Es soll aber so aussehen:

    +++++++++++
    | Heft1 | Titel1 |
    | | Titel2 |
    +++++++++++
    | Heft2 | Titel1 |
    | | Titel2 |
    | | Titel2 |
    +++++++++++

    Das Heft soll nur 1x erscheinen und dazu alle Titel, dann der nächste Abschnitt mit dem nächsten Heft. Wie gebe ich das aus ?

    Hiermit klappt es nicht:

    <?php do { ?>

    <?php echo $row_Satz['heft']; ?>;
    <?php echo $row_Satz['titel']; ?>;

    <?php } while ($row_Satz = mysql_fetch_assoc($Satz));
    mysql_free_result($Satz);
    ?

    Für eine Lösung wäre ich sehr dankbar
    Gruss Andreas

  • #2
    Ich denke, dass was du suchst heißt Gruppenwechsel. Mehr als das Stichwort kann ich dir nicht liefern, aber die Forumssuche gibt dir da mehr als genug Beispiele aus.

    Kommentar


    • #3
      und sowas:
      http://dev.mysql.com/doc/mysql/en/gr...html#id3106553

      Heft1 | Titel1,Titel2, ..
      mfg,
      [color=#0080c0]Coragon[/color]

      Kommentar


      • #4
        Hallo, habe unter gruppenwechsel was gefunden und es klappt auch, nur die heftID steht zuletzt, sie soll aber in der Tabelle links von den Titeln stehen. Was mach ich da noch falsch ?

        <?php
        $result = mysql_query($query_Satz) OR die(mysql_error());
        $flag_erster_datensatz = true;

        echo "<table border='2'>";
        echo "<tr>";
        echo "<td>TITEL</td>";
        echo "</tr>";

        while($row = mysql_fetch_array($result)) {

        $aktueller_datensatz = "".$row['heftID']."<br />\n";

        if(!$flag_erster_datensatz && $aktueller_datensatz != $vorletzter_datensatz) {
        echo "<td>".$vorletzter_datensatz."</td>";
        }

        echo "<tr>";
        echo "<td>".$row['Heft-Titel']."</td>";
        echo "</tr>";

        $flag_erster_datensatz = false;
        $vorletzter_datensatz = $aktueller_datensatz;
        }
        echo $vorletzter_datensatz;
        echo "</table>";
        ?>

        Kommentar


        • #5
          [SQL allgemein] LEFT OUTER JOIN klappt nicht

          Hallo, danke erstmal für die vielen Hinweise, habe meinen Grupenwechsel hinbekommen, joch habe ich noch einen kleinen Haken.

          Folgende Abfrage funzt nicht

          PHP-Code:
          $query_Satz "SELECT * FROM mm_heft 
          LEFT OUTER JOIN mm_index ON mm_heft.heftID=mm_index.heftID 
          WHERE mm_heft.jahr='1951'"

          Inder ersten Tabelle habe ich die mm_hefte mit 01,02,03,usw. stehen, wobei auch Hefte sind, die noch keinen Index haben.
          Jedoch zeigt er mir dies nicht an, macht nur Lücken. Was mache ich noch falsch ?

          Gruss Andreas

          Kommentar


          • #6
            Hallo, habe die Lösung gefunden, nach 2 Nächten des Probierens. Noch ein Frage dazu.

            Warum verhalten sich Variablen in und ausserhalb einer While-Schleife verschieden ? Dies war nämlich die Lösung bei mir, nachdem ich eine Variable vor der Whileschleife setze funktioniert alles perfekt mit meinem Gruppenwechsel.

            Gruss Andreas

            Kommentar


            • #7
              Wie wander ich 1 Datensatz vor ?

              Hallo und guten Morgen !

              Nachdem ich meinen Gruppenwechsel hinbekommen habe, versuche ich nun die Ausgabe der Daten in eine Tabelle zu bekommen, was gar nicht so einfach ist.

              Der Gruppenwechsel wird am Anfang der While-Schleife geprüft, nur brauche ich schon während des Tabellenaufbaus eine Prüfung. Daher meine Idee, während des Tabellenaufbaus einen Datensatz vorspringen, schauen ob sich die Gruppe ändert. Wenn ja, muss ich dann die Tabelle schließen und dann wieder 1 Satz zurück.

              Geht sowas überhaupt, oder hat jemand eine andere Lösung ?

              Gruss Andreas

              Kommentar


              • #8
                Zeig mal deinen bisherigen Code, vor allem wie und wo du momentan feststellst, dass ein Gruppenwechsel stattfand
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  mrhappiness: Schau mal hier: http://www.php-resource.de/forum/sho...threadid=54651

                  Kommentar


                  • #10
                    Wenn's das ist:
                    1. Warum gibst du die Tabelle an sich nicht auch innerhalb der Schleife aus?
                    2. Warum machst du einen Thread dafür auf?

                      Wenn keine Begründung kommt, hänge ich den hier an den oben gepostetn dran
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      So ganz habe ich dein Problem nicht verstanden. Liegt es vielleicht hieran?
                      PHP-Code:
                      ... }
                      echo 
                      $vorletzter_datensatz;
                      echo 
                      "</table>"
                      Wenn du etwas ans Ende schreibst, musst du dich auch nicht wundern, wenn was am Ende steht. Mal abgesehen davon, dass die Ausgabe in keiner Tabellenzeile mehr steht
                      Zu deinem Problem. Versuche doch erst einmal alle Heftids auszugeben. Wenn das zufriedenstellend funktioniert, kannst du dich ja an die Titel wagen. Immer schön eins nach dem anderen. So sollte auch gewährleistet sein, dass alles an der richtigen Stelle ausgegeben wird.

                      Außerdem wäre es nett, wenn du deinen Code auch in die entsprechenden Tags schreibst, damit man ihn besser lesen kann.

                      Kommentar


                      • #12
                        Hallo !

                        Habe neuen Thread gemacht, weil ich dachte, neue Frageinhalte müssen im neuen Thread geöffnet werden, sorry wusste es nicht.

                        Hier noch einmal mein Problem. Die Tabelle ist in der While-Schleife, jedoch wird die 2. Tabelle geschlossen, bevor ich alle HeftTitel angezeigt habe. Es wird nur ein Tilet ordentlich in der Tabelle angezeigt, der Rest einfach quer drunter.

                        PHP-Code:
                        <?php
                        $result 
                        mysql_query($query_Satz) OR die(mysql_error());
                        $letzter_datensatz 0;

                        while(
                        $row mysql_fetch_array($result)) {
                        $aktueller_datensatz $row['heftID'];

                        if(
                        $aktueller_datensatz != $letzter_datensatz) {    

                        echo 
                        "<table cellspacing='0' cellpadding='0' border='1' style='width:100%'>";
                        echo 
                        "<tr>";
                        echo 
                        "<td>".$row['ausgabenr']."</td>";
                        echo 
                        "<td>";

                        // 2.Tabelle für die Heft-Titel
                        echo "<table cellspacing='0' cellpadding='0' border='1' style='width:100%'>";
                        echo 
                        "<tr>";
                        echo 
                        "<td>TITEL</td>";
                        echo 
                        "<td>ZEICHNER</td>";
                        echo 
                        "</tr>";
                        }
                        echo 
                        "<tr>";
                        echo 
                        "<td>".$row['titel']."</td>";
                        echo 
                        "<td>".$row['zeichner']."</td>";
                        echo 
                        "</tr>";

                        // HIER BRAUCHE ICH EINE PRÜFUNG, TABELLE DARF ERST GESCHLOSSEN
                        // WERDEN, WENN KEIN TITEL VORHANDEN. 1 Satz Vorwandern ???
                        echo "</table>";

                        echo 
                        "</td>";
                        echo 
                        "<td>FOTO</td>";
                        echo 
                        "<td>EXTRAS</td>";
                        echo 
                        "</tr></table>";

                        $letzter_datensatz $aktueller_datensatz;
                        }
                        ?>
                        Meine Frage war nun, kann ich die vorzeitige Prüfung mit einem Datensatz vorwandern, um zu wissen, ob das neue Heft kommt, damit ich die Tabelle schließen kann ?

                        Gruss Andreas

                        Kommentar


                        • #13
                          Und warum schließt du die Tabelle nicht auch unter genau den gleichen Bedingungen, untern denen du sie öffnest?

                          Das entsprechende if hast du doch schon und müsstest es nur noch um das </table>-Geraffels drumrumbasteln, oder sehe ich das falsch
                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Kommentar


                          • #14
                            Habe ich auch schon probiert in der Form

                            PHP-Code:
                            if($aktueller_datensatz == $letzter_datensatz) {    
                               echo 
                            "</table>";

                            Geht aber nicht, weil ich erst hier weiß,

                            PHP-Code:
                            while($row mysql_fetch_array($result)) {
                            $aktueller_datensatz $row['heftID']; 
                            ob ein neues Heft kommt, nur dann ist es zu spät.

                            Gruss Andreas

                            Kommentar


                            • #15
                              Dann solltest du (bevor du eine neue Tabelle "aufmachst") prüfen, ob du eine alte "schließen" musst

                              PHP-Code:
                              if($aktueller_datensatz != $letzter_datensatz) {
                              //Gruppenwechsel, neue Tabelle "aufmachen
                              //Noch offene Tabelle schließen, aber nur, wenn es eine gibt
                                
                              if ($letzter_datensatz != 0) {
                                
                              //Es gibt einen Wechsel und die alte Gruppe ist nicht 0
                                //D. h., es wurden schon Daten ausgegeben

                                //Code zum "Schließen" der Tabelle
                                
                              }
                                
                              //Tabelle "öffnen"

                              Ich denke, also bin ich. - Einige sind trotzdem...

                              Kommentar

                              Lädt...
                              X