2011-01-06 6 views
0

teh follwoing Abfrage haben, die schön und gut ist ...Wählen Elternknoten in verschachtelte Datensatz

SELECT 
    `node`.`site_pages_id` AS `page_id` , 
    GROUP_CONCAT(`parent`.`site_pages_id` SEPARATOR '/') AS `path` , 
    IFNULL(CONCAT('/' , GROUP_CONCAT(`parent`.`url` SEPARATOR '/')) , '/') AS `url` 
FROM 
    `site_pages` AS `node` 
LEFT JOIN 
    `site_pages` AS `parent` 
ON 
    `node`.`lft_limit` BETWEEN `parent`.`lft_limit` AND `parent`.`rgt_limit` 
GROUP BY 
    `node`.`site_pages_id` 
ORDER BY 
    `node`.`lft_limit` ASC 

erzeugt die folgende

1, 1, /
2, 1/2, /about-us 
8, 1/2/8, /about-us/meet-the-team 
3, 1/3, /web 
5, 1/5, /print 
6, 1/6, /branding 
7, 1/7, /contact-us 

Alle süß.

Ich möchte den unmittelbaren Elternteil und nur die unmittelbare Eltern für jeden Knoten auswählen.

Meine schwachen Versuche, dies ohne eine böse Unterabfrage zu tun, scheitern miserabel (nicht viel besser mit TBO).

Tipps muchly

+1

können einige Beispiel der erwarteten Ausgabe liefern? – ajreal

+0

sicher. Von diesen Tupeln möchte ich ein zusätzliches Feld mit den Werten NULL, 1,2,1,1,1,1 (in der gleichen Reihenfolge wie die vorherige Liste). Offensichtlich müsste es in jeder Tiefe funktionieren. Wenn ich also eine Aufzeichnung hätte, die 1/2/8/15/76 (5 tief) zeigt, würde ich gerne 15 als Eltern auswählen. –

+0

Können Sie eine Untergruppe des Schemas der Datenbanktabelle veröffentlichen? –

Antwort

0

No probs Martin ... geschätzt

page_id url   lft_limit rgt_limit 
1,  NULL,   1,   14, 
2,  about-us,  2,   5, 
3,  web,   6,   7, 
5,  print,   8,   9, 
6,  branding,  10,   11, 
7,  contact-us, 12,   13, 
8,  meet-the-team, 3,   4, 
Verwandte Themen