Rekursives SQL-Statement

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

  • Rekursives SQL-Statement

    Hi Leute!

    ich habe folgendes Problem:
    Ich möchte Artikel einer bestimmten Artikelgruppe anzeigen und zusätzlich alle Artikel von den untergeordneten Artikelgruppen.
    Das erste ist kein Problem, einfach ein WHERE ...=... dranhängen.
    Wie schaffe ich das aber die anderen Artikel, die ja eine WHERE Bedingung haben die erst im Statement abgefragt wird, in das selbe Result einzufügen (per SQL oder PHP, das ist egal).
    D.h. ich will am Ende in der PHP-MySQL-ResultID ALLE Artikel unterhalb einer Artikelgruppe haben! (die Artikel speichern nur ihrer direkte Gruppe, nicht die übergeordneten Gruppen).

    Vielen Dank im voraus!
    ThaBaker

  • #2
    Noch was: Gut wäre am Ende eine Liste die man mit LIMIT beschränken könnte....

    ein Vorschlag von mir:
    -Verschiedene SQL-Statements benutzen und die Ergebnisse in einer temporären Tabelle abspeichern. Nachteil: Neue Tabelle muss mit eindeutigem Namen erzeugt werden, bei vielen Abfragen Performance-Einbussen?!

    Kommentar


    • #3
      hi,

      entweder suchst du mal nach "join" oder postest deine tabellenstrukturen.

      gruss wurzel
      Kissolino.com

      Kommentar


      • #4
        also hier mal die Tabellenstruktur:

        Table "articlegroups":
        -idx (INT)
        -groupname (VARCHAR)
        -parentgroup (INT)

        "parentgroup" zeigt wieder auf einen Eintrag in dieser Tabelle und steht für die übergeordnetet Gruppe.
        BSP: Artikelgruppen Tabelle
        Code:
        -ESSEN (IDX = 1; PARENTGROUP = 0)
           +NUDELN (IDX = 2; PARENTGROUP = 1)
           +FLEISCH (IDX = 3; PARENTGROUP = 1)
              +SCHNITZEL (IDX = 4; PARENTGROUP = 3)
        -TRINKEN (IDX = 5; PRENTGROUP = 0)
        Jeder Artikel hat das Feld "articlegroup", das seine Gruppe speichert.
        Das Prblem liegt nun darin z.B. alle Artikel unterhalb von z.B. "FLEISCH" angezeigt werden sollen. Beipielartikel:
        Artikeltabelle
        -BRATEN (ARTICLEGROUP = 3)
        -GUOLASCH (ARTIKLEGROUP = 3)
        -SCHWEINESCNITZEL (ARTICLEGROUP = 4)
        -SCHNITZEL VOM RIND (ARTICLEGROUP = 4)

        Jetzt will ich wenn die Artikelgruppe FLEISCH ausgewählt wird, ALLE Arikel von der Gruppe FLEISCH, aber auch alle Artikel unterhalb dieses Knotens anzeigen!
        Zuletzt geändert von thabaker; 25.02.2003, 14:39.

        Kommentar


        • #5
          Das mit JOIN verstehe ich noch nicht ganz,
          aber kann mir UNION weiterhelfen? Kann mir da jemand bitte ein Beispiel zeigen?

          DANKE!!

          Kommentar


          • #6
            PHP-Code:
            $sql "select * from articlegroups where idx='$idx' or parentgroup='$idx' order by idx, groupname limit 0,10"
            ist es das, was dir vorschwebt ? Ich weiss zwar nicht, wo "SCHWEINESCNITZEL (ARTICLEGROUP = 4)"
            nu herkommen (selbe tabelle ??) aber wenn keine 2. existiert sollte das obige statement klappen.

            mahlzeit wurzel
            Kissolino.com

            Kommentar


            • #7
              Ich glaub was du suchst ist eine rekursive query, die dir alle Unterkategorien auf einmal ausliest. Dazu gibt es verschiedene Ansätze. Ein sehr beliebter Ansatz ist das Nested-Tree Prinzip.

              Querying XML Data Based on Nested Relational Sequence Model

              http://www.codebits.com/ntm/

              http://www.google.de/search?hl=de&ie...le-Suche&meta=
              Hello World

              Kommentar


              • #8
                @wurzel: Ich habe im obigen Post noch hingeschreiben, aus welchen Tabellen die Beispieldaten kommen (einmal aus der Artikelgruppen-Tabelle, einmal aus der Artikeltabelle, d.h. SCHITZEL ist die Gruppe SCHNITZEL!)
                Ausserdem können die Artikelgrouppen beliebig geschachtelt werden, es ist nicht auf 2 oder 3 ebenene festgelegt!

                |Krusenbaum: werde ich mal lesen, aber ich kenne mich noch nicht so gut aus...

                Kommentar


                • #9
                  sorry,
                  nachdem es jetzt fett riech ich den braten auch

                  für die "nested sets" kannst du auch hier mal in den tuts
                  nachschaue, berni hat da was verfasst.
                  Kissolino.com

                  Kommentar


                  • #10
                    thx!

                    dann lese ich mir mal das "neested" durch...

                    Ich habe mir als Alternative das "UNION" Statement rausgesucht. Gibts da Performanceprobleme wenn man viele (>5) SELECTs miteinander verbindet? Kann ich das Ergebnsi der UNION Abfrage mit LIMIT begrenzen?

                    Kommentar

                    Lädt...
                    X