Path Enumeration

jetwork

Fleissiger Benutzer
Beiträge
97
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
 
Werbung:
Code:
Select t.*
From   pecategory t
Where  t.path Like '%/' || :boss_deines_zweigs || '/'

Sollte funktionieren :)

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.
 
Meinst du, wir haben für dieses Problem keine Lösung ohne rekursive Abzufragen?

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.
 
Werbung:
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.
 
Zurück
Oben