2014-04-08 31 views
1

請與我裸...我是新手所以我真的什麼是毫無疑問的基礎在這裏給大家掙扎......創建用戶登錄一個MySQL父/子關係查詢

我有一個客戶數據庫我想要啓用父/子查看權限。

即這是怎麼了我已經建立了我的數據(我不知道這是否是管理最好的方式)

id parent_id name 1 5 Cust 1 2 5 Cust 2 3 6 Cust 3 4 6 Cust 4 5 0 Group Head 6 5 Sub Group 7 0 Cust 5 8 0 Cust 6

因此,這種關係的可視表示:

Group Head - Cust 1 - Cust 2 - Sub Group -- Cust 3 -- Cust 4

我需要對這種關係進行2次檢查(這讓我意識到我認爲我沒有最好的結構...

  1. 首先檢查,當「組頭」或「子組」在日誌中,我想,以確定他們是一羣這樣我就可以與客戶交換選項
  2. 目前他們我需要執行一個查詢回報所有客戶

即如果我登錄爲「子集團,它應該只返回卡斯特3 &卡斯特4但是,如果我登錄爲「組頭」它將返回卡斯特1,卡斯特2,卡斯特3 & cust 4(注意:它不包括「子組」,因爲它是一個組,不是客戶)

對於第一個問題,我想我需要另一個可以識別爲一個組的字段嗎?這是最好的方法嗎?

對於第二個問題,我已經構建了這個查詢,我需要擴展以返回「子組」客戶。

SELECT c.id, 
    c.parent_id, 
    c.name, 
FROM Customer c 
WHERE c.parent_id = '5' 

這將返回:

id parent_id name 1 5 Cust 1 2 5 Cust 2 6 5 Sub Group

我想要什麼,結果顯示:

id parent_id name 1 5 Cust 1 2 5 Cust 2 3 6 Cust 3 4 6 Cust 4

即排除了 '子組',因爲它不是一個客戶和告訴我任何有孩子的選擇的孩子。

注意:如果必須,我可以解決顯示子組的問題嗎?

請幫忙嗎?

+0

這取決於您的分組的複雜程度。它總是隻有2個級別的分組,或者你想支持更深層次'group - sub grp - sub sub group - ... sub subgroup' –

+0

嗨,在這個階段,我想限制它到2分組水平。 –

回答

-1

的父/子邏輯是對我來說有點含糊,但我想你可以嘗試

SELECT c.id, c.parent_id, c.name, 
    FROM Customer c 
WHERE c.parent_id = '5' 
    AND c.id not in (5,6) 

下面是結果

SELECT c.id, c.parent_id, c.name 
    FROM ttest c 
WHERE c.parent_id in (5,6) 
    AND c.id not in (5,6) 


    ID PARENT_ID NAME 
---- ---------- ---------- 
    1   5 Cust 1 
    2   5 Cust 2 
    3   6 Cust 3 
    4   6 Cust 4 
+0

這不會顯示ID 3和4,因爲他們的parent_id = 6,而且,我需要能夠以編程方式識別5,6,而不是手動即我能用什麼來識別它們作爲組&非客戶 –

1

介紹至少類型列(以及可能的customer_type表參考)

所以說,組頭是1000,子組是1500

過濾客戶類型小於1000 因此我們可以有足夠的空間以後擴展

+0

我想這會是不可避免地不能避免......我希望有一種方法可以不爲這個創建2列,但是從我看它的每一個方面來說,我可以得出這樣的結論 –