2012-07-09 62 views
0

我有一個嵌套組的組織中,看起來像這樣(的節點組織IDS):MySQL的組嵌套的非孩子的關係

A nested set org chart

1234是4499和3322父,但9905是「心心相印」,不是一個真正的父母或子女,到1234

我相信leftedge,rightedge設置應該是這個樣子:

orgID | leftedge | rightedge 
1234 | 1  | 6 
4499 | 2  | 3 
3322 | 4  | 5 
9905 | 7  | 8 

辛格Ë9905是不是真的1234一個孩子,我不知道我怎麼能得到1234和9905.之間的關係,我用它來獲取子關係的SQL是:

SELECT ost.orgid, ost.leftedge, ost.rightedge 
    FROM tbl_organisationsettree ost 
    JOIN tbl_organisationsettree AS child_ost ON child_ost.leftedge BETWEEN ost.leftedge AND ost.rightedge 
    AND child_ost.supersetid = ost.supersetid 
WHERE 1 
    AND ost.leftedge > 1 
    AND ost.rightedge <6 
GROUP BY child_ost.ID 
HAVING COUNT(child_ost.ID) = 1 
+0

您是否有可用的關係類型?這應該可以幫助您找出差異。而且因爲我是一個oracle的傢伙,所以我會提醒說在這個世界裏這是一個CONNECT BY問題。 – Randy 2012-07-09 12:22:47

+0

我還沒有可用的關係類型,但是由於我正在構建此係統的原型,因此我可以添加一個。我應該將它添加到我的orsettree表嗎?也會通過 – Jarede 2012-07-09 12:25:15

回答

0

查找不屬於任何節點節點的父節點或祖先節點1234

SELECT ost.*  --- whatever from `org` table 
FROM tbl_organisationsettree AS ost 
    JOIN tbl_organisationsettree AS param 
     ON param.leftedge NOT BETWEEN ost.leftedge 
           AND ost.rightedge 
     AND ost.leftedge NOT BETWEEN param.leftedge 
           AND param.rightedge 
WHERE param.orgID = 1234 

--- if you only root nodes: 
--- 
--- AND NOT EXISTS 
---  (SELECT * 
---  FROM tbl_organisationsettree AS parent 
---  WHERE ost.leftedge > parent.leftedge 
---   AND ost.leftedge < parent.rightedge 
--- ) 
; 
+0

連接起來讀取,從9905開始帶回4499,3322和1234,用不存在的方式就沒有帶回來。關於這個問題的任何指導? – Jarede 2012-07-09 16:32:59

+0

意識到我當然可以在關卡上搜索,不知道其他人可能沒有關卡記錄 – Jarede 2012-07-09 16:56:45

+0

@Jarede:編輯。 – 2012-07-10 08:50:54