Verschachtelte SQL nach Bedingungen filtern

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

  • Verschachtelte SQL nach Bedingungen filtern

    Hallo zusammen,
    sitze jetzt 4 Stunden mit allen möglichen Kombinationsversuchen an folgendem Problem:

    Habe eine mehrdimensionale Gruppentabelle:

    - sub_of = child Gruppe -> eine group_id
    - sequence = Reihenfolge innerhalb einer "sub_of" group_id
    - group_id = wird Benutzern in Zuordnungstabelle zugeordnet

    welche wie folgt aussieht:

    - group_id
    - user_id

    Was ich will ist eigentlich relativ einfach: ich möchte in einer Abfrage herausfinden, in welchen Gruppen der Nutzer X ist und welche die größte "sequence" der dazugehörigen "sub_of" group_id ist. Ziel ist es, automatisiert einen User ein Semester weiter zu schieben, und sequence einmal hochzuzählen um dann die dazugehörige (neue) group_id abzufragen und in die Zuordnungstabelle zu schreiben.

    Meine bisherige Query sieht so aus:

    Code:
    SELECT sequence AS akt_child, max(pfh_groups.sub_of)  AS akt_parent
    FROM pfh_groups
    LEFT  JOIN pfh_users_to_groups ON pfh_groups.group_id = pfh_users_to_groups.group_id = 45
    LEFT  JOIN pfh_users ON pfh_users.user_id =  pfh_users_to_groups.user_id
    WHERE sub_of = 45
    Dummerweise berücksichtigt dies nicht die sequence, die der User per Zurodnungstabelle über die group_id bereits erreicht hat, sondern gibt immer 1 aus.
    Falls jemand eine einfachere Lösung parat hat, wäre ich echt super dankbar!
    Grüße
    Teco

  • #2
    Probier die o.ä. Richtung:

    SELECT b.user_id, b.group_id, a.sequence FROM (SELECT MAX(sequence) AS sequence, sub_of FROM pfh_groups GROUP BY sub_of) a, pfh_users b
    WHERE b.group_id = a.sub_of AND b.user_id = <<UserId>>

    Gibt zu einem Benutzer alle GruppenIds, und die zugehörige größte Sequenz zurück.

    Kommentar


    • #3
      Hallo,

      wenn du die Möglichkeit hast, die DB-Tabelle umzugestalten, solltest du dir mal "Nested Sets" ansehen, das ist in diesem Fall vermutlich sehr hilfreich.

      Gruß,

      Amica
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar


      • #4
        ... dazugehörigen "sub_of" group_id ist.

        Wenns anders gemeint ist, als es da steht, dann wirds schwieriger

        tell me

        Kommentar


        • #5
          Hallo zusammen,
          vielen Dank für die Tipps,
          ich habe dank EVAMasters Denkanstoss nun folgende Query:

          Code:
          SELECT DISTINCT b.user_id, c.group_id, a.sequence FROM (SELECT MAX(sequence) AS sequence, 
          sub_of FROM pfh_groups GROUP BY sub_of) a, pfh_users b, pfh_users_to_groups c WHERE c.group_id = a.sub_of 
          AND b.user_id = '<<u_id>>' AND c.user_id = '<<u_id>>' AND c.group_id = <<parent_group_id>>
          folgender Output:

          user_id group_id sequence
          7 ______ 45______ 6
          Das gibt mir jetzt schonmal die höchste Sequence die für die group_id existiert - schonmal gut. Jedoch wird immer noch nicht die maximale sequence des Users über die group_id<->user_id Zuordnungstabelle selbst berücksichtigt, die ist momentan nur 3 bei group_id 51

          die parent group_id rufe ich übrigens so ab (was bisher ganz passabel läuft):

          Code:
          SELECT max(pfh_groups.sub_of) AS akt_parent, pfh_groups.name AS akt_name FROM pfh_groups, 
          pfh_users, pfh_users_to_groups  WHERE pfh_users.user_id = '".$u_id."' AND pfh_users.user_id = pfh_users_to_groups.user_id 
          AND pfh_groups.group_id = pfh_users_to_groups.group_id AND pfh_groups.sub_of != '0' ORDER BY pfh_groups.sequence
          @AmicaNoctis: das Problem ist, dass das Projekt morgen vorgestellt wird und ich deswegen "leicht" unter Zeitdruck stehe :-)

          Anbei nochmal ein dump der groups und user_to_groups tabelle zum besseren Verständnis: http://up.stmq.de/files/sql-problem.sql

          Viele Grüße

          Kommentar

          Lädt...
          X