Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Path Enumeration

Dieses Thema im Forum "Datenmodellierung, Datenbank-Design" wurde erstellt von jetwork, 17 Dezember 2014.

  1. jetwork

    jetwork Fleissiger Benutzer

    Hallo Zusammen,

    Ich habe die Folgende Tabelle namens pecategory

    upload_2014-12-17_10-45-12.png

    Code:
    CREATE TABLE IF NOT EXISTS `pecategory` (
      `id` int(2) NOT NULL DEFAULT '0',
      `name` varchar(50) DEFAULT NULL,
      `boss` int(2) DEFAULT NULL,
      `path` varchar(50) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ;
    
    INSERT INTO `pecategory` (`id`, `name`, `boss`, `path`) VALUES
    (1, 'head', NULL, '/1/'),
    (2, 'zweig1', 1, '/1/2/'),
    (3, 'zweig2', 1, '/1/3/'),
    (4, 'zweig1a', 2, '/1/2/4/'),
    (5, 'zweig1b', 2, '/1/2/5/');
    
    Ich kann mit folgende abfrage die kinder von einem Eintrag finden. z. B. die kinder von zweig1
    Code:
    SELECT *
    FROM pecategory
    WHERE path LIKE '/1/2/%'
    
    Wie finde ich aber die Parents von einem Eintrag? Kann jemand bitte eine Abfrage für zweig1a oder zweig1b schreiben

    Danke im Voraus
     
  2. Distrilec

    Distrilec Datenbank-Guru

    Code:
    Select t.*
    From   pecategory t
    Where  t.path Like '%/' || :boss_deines_zweigs || '/'
    Sollte funktionieren :)
     
  3. jetwork

    jetwork Fleissiger Benutzer

    Solche abfragen habe ich gesehen. Ich verstehe aber nicht. Kannst du genauer schreiben was bedeutet ":". Soll ich dort für zweig1a oder zweig1b einfach 2 (id des Parents) schreiben.
    Code:
    Select t.*
    From  pecategory t
    Where  t.path Like '%/' || 2 || '/'
    
    Das funktioniert nicht. Ich bekomme die ganze Tabelle wieder.
     
  4. jetwork

    jetwork Fleissiger Benutzer

    Meinst du, wir haben für dieses Problem keine Lösung ohne rekursive Abzufragen?
     
  5. Hony%

    Hony% Datenbank-Guru

    Es gibt immer Lösungen ohne Rekursion. Aber vermutlich hat alleine eure Arbeitszeit für die Umsetzung der Nested Sets mehr gekostet als eine Migration auf ein leistungsfähigeres System kosten würde.
     
    akretschmer gefällt das.
  6. akretschmer

    akretschmer Datenbank-Guru

    Es mag vielleicht andere Lösungen geben, aber ob die besser sind?

    Du könntest ja z.B. in der Applikation das abbilden, aber das endet dann in vielen einzelnen Abfragen. Mit 'WITH RECURSIVE ...' übernimmt die DB das - die ist näher dran an den Daten und kann das definitiv besser als die Applikation.
     
    Hony% gefällt das.
  7. Hony%

    Hony% Datenbank-Guru

    Und vielleicht kommt ja noch eine zweite und dritte Anwendung dazu. Dann muss die entsprechende Logik jedes mal neu und fehlerfrei umgesetzt werden.
     
  8. ukulele

    ukulele Datenbank-Guru

    Ich würde sagen er sucht:
    Code:
    DECLARE    @pfad VARCHAR(10)
    SET        @pfad = '/1/2/4/'
    
    SELECT    *
    FROM    pecategory
    WHERE    path = left(@pfad,len(@pfad)-charindex('/',reverse(left(@pfad,len(@pfad)-1))))
    um den Überordner zu finden. Ist natürlich MSSQL aber alle Funktionen sollte es in MySQL auch geben.
     
Die Seite wird geladen...
Ähnliche Themen - Path Enumeration
  1. kjh54tergkjjj
    Antworten:
    1
    Aufrufe:
    3.906

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden