1:n Tabellen verknüpfen und sortieren

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

  • 1:n Tabellen verknüpfen und sortieren

    Hallo zusammen,

    auch wenn es so aussieht, als ob es viele Lösungen zu diesem Problem im Forum gäbe, so habe ich noch keine wirklich Lösung für mein Problem gefunden. Falls hier doch bereits eine gepostet worden sein sollte, bitte ich schon jetzt um Vergebung.

    Ich habe folgendes Problem:

    2 Tabellen mit einer 1:n Beziehung.

    Tabelle 1 hat diese Felder:

    a_index
    a_titel
    a_user

    Tabelle 2 hat diese Felder:

    b_index
    b_index_a
    b_text
    b_zeit

    Jeder Eintrag in Tabelle 1 hat keinen, einen oder mehrere ihm zugeordnete Einträge in Tabelle 2. Dabei sind die Einträge in Tabelle 2 über das Feld b_index_a mit den Einträgen der Tabelle 1 verknüpft.

    Ich möchte nun eine Abfrage, die es mir ermöglicht, NUR alle Einträge aus A anzuzeigen und zu sortieren. Die Sortierung bereitet mir nun Kopfschmerzen, denn die Einträge sollen so sortiert sein, dass diejenigen zu denen es die neuesten Einträge in Tabelle B gibt ganz oben stehen.

    Ich habe folgenden SQL-String gebastelt:

    SELECT tab_1.*,tab_2.* FROM tab_1 RIGHT JOIN tab_2 ON tab_1.a_index = b_index_a ORDER BY b_zeit DESC

    Der hat jedoch das Problem, dass er für jeden einzelnen Datensatz in B den zugehörigen Stammdatensatz aus A schreibt.

    Der Einsatz von GROUP BY a_index vor dem ORDER BY bringt leider auch nichts, da greift dann das ORDER BY nicht mehr.

    Kann mir evtl jemand einen besseren Vorschlag machen?

    Herzlichen Dank im Voraus!

    MfG
    Mike

  • #2
    sollen auch datensätze angezeigt werden, zu denen in tabelle B nix ist?
    h.a.n.d.
    Schmalle

    http://impressed.by
    http://blog.schmalenberger.it



    Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
    ... nur ohne :-)

    Kommentar


    • #3
      ja, es sollen alle Datensätze in A angezeigt werden, auch wenn in B nichts ist. Ich hatte vergessen zu schreiben, dass Tabelle A ebenfalls eine Spalte a_zeit hat, die in diesem Fall greifen soll.

      Das heisst, dass alle Einträge in A nach dem jeweils zugehörigen neuesten Eintrag in B sortiert angezeigt werden soll. Wenn es in B keinen gibt greift eben die Zeit von A.

      Kommentar


      • #4
        Code:
        SELECT a.*,b.* FROM tab_1 a 
        LEFT OUTER JOIN tab_2 b ON a.a_index = b.b_index_a 
        group by a.a_index 
        ORDER BY b.b_zeit, a.a_zeit DESC
        h.a.n.d.
        Schmalle

        http://impressed.by
        http://blog.schmalenberger.it



        Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
        ... nur ohne :-)

        Kommentar


        • #5
          Hallo,

          vielen Dank für den Tipp.

          Es kommt noch eine kleine Komplikation dazu, von der ich aber ausgegangen bin, dass ich sie selbst implementieren könne:

          Tabelle A hat noch eine index Spalte, mit dem Namen a_index_c. Es sollen nur alle Datensätze aus A ausgelesen werden, für die ich einen fixen Wert angebe (das ist um festzustellen, ob der Datensatz schon gelöscht wurde oder nicht).

          Ich habe das mal so versucht:

          Code:
          SELECT a.*,b.* FROM tab_1 a 
          LEFT OUTER JOIN tab_2 b ON a.a_index = b.b_index_a 
          group by a.a_index HAVING a.a_index_c=1
          ORDER BY b.b_zeit, a.a_zeit DESC
          Wenn ich den SQL wie von dir oben beschrieben übernehme ist er ok, sobald ich HAVING oder WHERE (direkt nach dem JOIN) einbaue sind die Datensätze wieder im Chaos.

          Die Zeit-Felder sind übrigens vom Typ DateTime. Gespeichert wird darin das Datum und die Uhrzeit in der von MySQL geforderten Syntax.

          Noch ne Idee?

          THX,

          Mike
          Zuletzt geändert von 0815_2; 14.01.2004, 16:19.

          Kommentar

          Lädt...
          X