GROUP BY - Problem

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

  • GROUP BY - Problem

    Hallo,

    ich habe ein kleines Problem beim sortieren und komm einfach nicht auf eine brauchbare Lösung. Hoffe, es kann mir jemand auf die Sprünge helfen.

    Ich habe eine Datenbank, in der es u.a. diese Felder gibt:

    datum - inhalt - kap - kap_id


    Ich möchte nun folgende Ausgabe:
    Alle Elemente, deren Wert in 'kap' != 0 ist sollen gruppiert werden. Angezeigt werden soll nach dieser Gruppierung der neueste Eintrag mit gemeinsamer 'kap' vom 'datum' her sein.
    Und...
    Alle Elemente, dereren Wert in 'kap' NULL ist sollen logischerweise ungruppiert angezeigt werden.

    Wozu der Umstand? Ich möchte eine Kapitel-Funktion umsetzen, in der halt Dokumente, die über mehrere Kapitel gehen, gruppiert angezeigt werden, neben den Dokumenten, die keine weiteren Kapitel haben.

    Meine bisherige Lösung war ein mittels UNION verknüpfter SQL-Query:

    SELECT * FROM $tbl_works WHERE rubrik = '$rub' AND kategorie = '$kat' AND locked != 'Y' AND kap_id = '' UNION SELECT * FROM $tbl_works WHERE rubrik = '$rub' AND kategorie = '$kat' AND locked != 'Y' AND kap_id != '' GROUP BY kap_id ORDER BY datum DESC LIMIT $pos,$maxcount

    So weit, so gut, nur werden Einträge, die eine gemeinsame 'kap' haben mit dem ältesten Eintrag wohl zuletzt guppiert, denn dieser wird nach Abschluss angezeigt. Ich möchte aber, das vor der Gruppierung schon der neueste unten liegt, damit dieser Neue letztendlich in der Liste steht.

    Hoffe, ich konnte mein Problem verständlich schildern?! Bild anbei. ;-)

    Please help,
    NoLabel
    Angehängte Dateien

  • #2
    Ich kann den Aufbau leider nicht ganz nachvollziehen (liegt aber wohl an meinem Unvermögen )

    ALso ich hätte sowas z.B. so aufgebaut :

    Tabelle books

    book_id title

    Tabelle chapters

    chapter_id book_id chapter_title datum


    Dann mit Join auslesen.


    An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

    Kommentar


    • #3
      Hallo MaxP0W3R,

      der Aufbau ist folgender:

      Besucher können Texte/Geschichten hinterlegen.
      Manchmal kommt es vor, das der Autor ein weiteres Kapitel zu der Geschichte einstellen will.
      Daher gibt es 'kap' und 'kap_id'.
      Unter 'kap' werden alle Datensätze zusammengefasst, die der Autor zu einer Geschichte zusammenfassen will.
      (Beispiel: Sein erstes Werk hat die ID 3. Dann erhält jedes weitere Kapitel im Feld 'kap' eine '3', um sie erkennen und gruppieren zu können.)

      Mit 'kap_id' legt er die Kapitel fest (da man ja vielleicht Leseprobentechnisch nicht die Kapitel 1+2, sondern vielleicht 1+5 oder A+B, präsentieren möchte. Der Eintrag in das 'kap_id'-Feld pro Datensatz wäre dann '1-1' für Kapitel 1 , '2-2' für Kapitel 2.)

      Also würde es in der Datenbank für eine Geschichte mit drei Kapiteln so aussehen:
      ------ kap kap_id
      --------------------------
      Titel A - 3 - 1-1
      other_ -
      Titel B - 3 - 2-2
      other_ -
      other_ -
      Titel C - 3 - 3-3


      Die gruppierte Ausgabe (mit meinem Query) ist:
      Titel A
      Kapitel: '1' 2 3


      Nun will ich aber, das er nicht Titel A anzeigt, sondern Titel C, da dies ja der letzte und neueste Eintrag ist (dafür wäre eigentlich das Order by datum gedacht, aber das interessiert ihn nicht :-().
      Titel C
      Kapitel: 1 2 '3'



      Hoffe, ich konnte es diesmal verständlicher ausdrücken. Ist immer schwer, das Problem nur kurz zu beschreiben, damit man nicht seitenweise Text hier hinklotzt.

      Kommentar


      • #4
        Ich möchte dich nun nicht kritisieren, aber deine Tabellenstruktur weist nun eine hohe Redundanz auf.

        Nicht nur dass das Speicherplatz kostet und Abfragen langsamer macht, auch siehst du nun dass du mit den Abfragen Probleme bekommst.

        versuche deine Daten auf die von mir vorgeschlagene struktur zu transferieren, wird dich nen tag arbeit kosten macht aber vieles einfacher dann...


        An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

        Kommentar


        • #5
          Original geschrieben von MaxP0W3R
          ... und Abfragen langsamer macht ...
          So ein Unsinn ... man normalisiert nicht um Abfragen schneller zu machen ... sondern einzig und allein um redundanzen zu reduzieren ... !

          Die Abfrage auf eine nicht normalisierte Datenbank dürfte im Zweifel immer schneller sein als der auf eine normalisierte!
          carpe noctem

          [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
          [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

          Kommentar


          • #6
            Original geschrieben von goth
            So ein Unsinn ... man normalisiert nicht um Abfragen schneller zu machen ... sondern einzig und allein um redundanzen zu reduzieren ... !

            Die Abfrage auf eine nicht normalisierte Datenbank dürfte im Zweifel immer schneller sein als der auf eine normalisierte!
            aber wenn er jetzt umständlich mehrere abfragen muss , anstatt dass alles mit einem join zu machen, wird das schon langsamer, oder ?


            An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

            Kommentar


            • #7
              Ich schrieb nicht über obigen Entwurf ... nur über die Normalisierung generell ... obiges scheint ja nun eher ein konzeptionelles Disaster zu sein ...
              carpe noctem

              [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
              [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

              Kommentar


              • #8
                Original geschrieben von goth
                Ich schrieb nicht über obigen Entwurf ... nur über die Normalisierung generell ... obiges scheint ja nun eher ein konzeptionelles Disaster zu sein ...
                Dann hast du natürlich Recht


                An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

                Kommentar

                Lädt...
                X