Sortierte Ausgabe

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

  • Sortierte Ausgabe

    Hi, habe leider ein echtes Problem, wo ich eigentlich schon dachte eine
    Lösung gefunden zu haben. Also ich habe eine DB aus der einige Tabellen
    sortiert ausgelesen werden sollen. Die Tabelle sieht so aus:

    tblLiga
    LigaID
    TeamName

    Nun möchte ich auf einer Seite jeweils folgende Ausgabe haben:

    Liga A
    Team a
    Team b
    Team c

    Liga B
    Team e
    Team f

    Liga C
    Team m
    Team x

    usw.

    Ich hatte das erst so gelöst:


    PHP-Code:
    if( $tmp != $LigaID)
    {
        
    Überschrift ausgeben
        $tmp 
    $LigaID;
    }
      
    Teams ausgeben 
    Hat auch gut funktioniert, bis ich als nächstes nun eine Funktion zum nachträglichen ändern und hinzufügen von weiteren Teams einrichten wollte.

    Dann steht da also später nochmal die gleiche LigaID mit einem weiteren Team, da es aber zwischendrinn einen wechsel der ID gegeben hat, erscheint nochmal die Überschrift und das neue Team darunter, dabei muss es ja zur entsprechenden, vorherigen Ausgabe zugeordnet werden.

    Wie kann man das lösen? Ich finde da momentan keinen Ansatz.

    Vielen Dank im Voraus.

    Sorry, hatte gar kein else drinn, also nur so wie oben...
    Zuletzt geändert von Luka; 14.09.2006, 15:29.

  • #2
    GROUP BY und ORDER BY kombiniert vllt ?
    à la GROUP BY ligaID ORDER BY teamname ASC
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      Habe ich schon probiert, aber wenn ich GROUP BY ligaID eingebe, dann habe nur 2 angezeigt bekommen, also jeweils ein Team per LigaID.

      Danke dennoch.

      Kommentar


      • #4
        idee:
        Code:
        letzteLiga = -1 // oder sonst irgend ein wert, der nie vorkommen wird.
        
        für jeden datensatz (sortiert nach liga)
        {
           wenn (datensatz.liga != letzteLiga)
              ausgabe ("Liga #") // überschrift
        
           ausgabe (datensatz.teamname)
        
           letzteLiga := datensatz.liga
        }
        na?

        Kommentar


        • #5
          @penizillin

          Im Prinzip ist es ja genau das, was ich bereits habe. Das funktioniert aber nur so lange, wie ich nicht irgendwann weitere Teams hinzufüge, dann sieht die Ausgabe so aus:

          Liga A
          Team A
          Team B

          Liga B
          Team E
          Team F

          Liga A
          Team C

          Liga C
          ...


          Ich verzweifle noch daran, wie muss die Lösung denn nur aussehen??

          Kommentar


          • #6
            Original geschrieben von Luka
            Das funktioniert aber nur so lange, wie ich nicht irgendwann weitere Teams hinzufüge
            Dann stimmt deine eingangs gemachte Aussage
            Also ich habe eine DB aus der einige Tabellen sortiert ausgelesen werden sollen.
            also entweder nicht - oder du sortierst nach einem unsinnigen Kriterium.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Doch die stimmt eigentlich schon. Ich habe die anderen Tabellen über Joins verbunden, aber ich glaube nicht das die im Moment wichtig sind.

              Mir geht es einfach nur darum zusammengehörige Daten zusammen darzustellen, egal wo sie in der Tabelle stehen. Jeder zusammengehörige Abschnitt hat dann halt seine eigene Überschrift. Das klappt aber wie gesagt nicht.

              Kommentar


              • #8
                Original geschrieben von Luka
                Doch die stimmt eigentlich schon.
                Dann müssten die Einträge ja nach Kategorien sortiert rauskommen, wenn du sie einfach so in einer Schleife ausgibst.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Ok, habe jetzt folgendes verwendet:

                  ... GROUP BY tblLeagueTeams.SeasonLeagueID

                  Nun gebe ich das in einer normalen while Schleife aus und bekomme tatsachlich bei 2 unterschiedlichen Ligen in der DB nur 2 mal die Überschrift angezeigt. Leider bekomme ich aber auch jeweils nur 1 Team pro Liga angezeigt.

                  Was könnte denn da noch verkehrt sein?

                  Kommentar


                  • #10
                    genau das macht GROUP BY - es gruppiert nach dem vorgegebenen kriterium - so erhältst du so viele verschiedene datensätze wie verschiedene kriterien existieren.

                    ich habe überhaupt nicht verstanden, was an deiner (und meiner) lösung nicht funktioniert.

                    Kommentar


                    • #11
                      Das Problem ist die Ausgabe.

                      Überschrift: Liga A
                      Team A
                      Team B

                      Überschrift: Liga B
                      Team E
                      Team F

                      Überschrift: Liga A
                      Team C

                      Überschrift: Liga C

                      das kommt raus, wenn ich die If Geschichte mit einbaue. Die DB Tabelle sieht so aus:

                      ID LigaID LigaName LeagueTeam
                      1 10 Liga A Team A
                      2 10 Liga A Team B
                      3 12 Liga B Team E
                      4 12 Liga B Team F

                      so nun habe ich gemerkt, dass ein Team fehlt für Liga A, also wird das eingefügt.

                      5 10 Liga A Team C

                      Wenn ich nun sage zeige die Überschrift an und lese aus bis sich Liga ID ändert, dann zeige die nächste Überschrift an, dann kommt es natürlich zu dem Fehler, dass die Liga A Überschrift unten für den neuen Eintrag (Team C) erneut angezeigt wird.

                      Ich hoffe jetzt ist es verständlicher. Also habe ich jetzt Group By LigaID verwendet, bekomme aber wie gesagt nur jeweils 1 Team pro Liga ID angezeigt.

                      Wo könnte der Fehler denn nun wieder liegen?

                      Kommentar


                      • #12
                        Ich hoffe jetzt ist es verständlicher. Also habe ich jetzt Group By LigaID verwendet, bekomme aber wie gesagt nur jeweils 1 Team pro Liga ID angezeigt.

                        Wo könnte der Fehler denn nun wieder liegen?
                        habe ich gerade eben erklärt und mache es nicht nochmal, bis du das manual diesbezüglich konsultiert hast.
                        [...]dann kommt es natürlich zu dem Fehler, dass die Liga A Überschrift unten für den neuen Eintrag (Team C) erneut angezeigt wird.
                        das liegt bloß daran, dass du nicht nach der liga-id sortierst, sondern nach irgend etwas anderem.

                        Kommentar


                        • #13
                          Du redest die ganze Zeit davon, dass du die Datensätze sortiert hättest - aber ganz offensichtlich hast du das nicht getan, oder nicht sinnvoll.

                          Und vergiss GROUP BY, das ist in dem Fall völliger Unsinn.
                          Hast du überhaupt schon begriffen, dass GROUP BY nicht zum Sortieren dient? Sortieren macht man mit ORDER BY.
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            Order by sortiert Datensätze nach bestimmten Kriterien

                            Group By fasst Datensätze einer "Kategorie" zusammen

                            oder liege ich da falsch?

                            Ich habe ja auch eher daran gedacht, dass ich beim SQL wenig machen kann und das Geheimnis in der Ausgabe selber liegt. Deswegen ja auch dieser Ansatz:

                            PHP-Code:
                            if( $tmp != $LigaID)
                            {
                                
                            Überschrift ausgeben
                                $tmp 
                            $LigaID;
                            }
                              
                            Teams ausgeben 
                            Der aber nur soweit geht, bis man irgendwann ein weiteres team einfügt.

                            Kommentar


                            • #15
                              sortiere nach liga-id.

                              Kommentar

                              Lädt...
                              X