2014-10-22 24 views
0

我想達到以下說我有一個表:MYSQL - 檢索一列中的所有子ID,給定一個父ID

products_id products_master 
-------------------------------- 
1     0 
2     0 
3     0 
4     2 
5     2 
6     2 
7     3 
8     3 

那麼我希望能夠返回選擇當列父行及其所有子,所以當我選擇products_id = 2

我想以下結果等欄目:

products_id  products_master simples_skus 
--------------------------------------------------------------------------------- 
2      0    4,5,6 

我希望這是有道理的!如果您需要進一步澄清,請不要問!這是在MYSQL :)

編輯:我收到的第一個答案讓我意識到一些額外的東西。

我應該提到,我希望這工作沒有我指定後我的身份證。因此,例如,我選擇了所有擁有主人0(意味着他們自己是主產品)的產品,並且我正在嘗試爲主產品獲取子ID(如果他們存在)。

回答

1

你澄清後,您的SQL查詢是:

SELECT t1.products_id, t1.products_master, group_concat(t2.products_id) AS simple_skus 
FROM table t1 INNER JOIN table t2 ON t1.products_id = t2.products_master 
WHERE t1.products_id = 2 
GROUP BY t1.products_master 

說明:您需要使用您的表兩次: 1.一次(t2)爲group_concat() 2.一次(t1)表達您的選擇(t1.products_id = 2

+0

嗨,那裏,其他列可以ign因爲他們非常棘手(這是一個非常長的陳述,所以我認爲這將是無關緊要的)關於simples_skus,我需要他們是4,5,6肯定。我試圖讓所有與我選擇的行具有相同父代的孩子。提到的所有列(相關)都在同一個表中。我現在要試一下你的查詢:) – user1942793 2014-10-22 10:47:55

+0

好的好友現在會這樣做,我進一步編輯了這個問題,因爲我意識到了另一個問題。對於那個很抱歉! – user1942793 2014-10-22 10:53:36

+0

非常感謝:) – user1942793 2014-10-22 11:51:28

0

隨着像下面的表:

Create table bla( 
    products_id int, 
    products_master int, 
    x int, 
    y int 
); 

和樣本值:

insert into bla VALUES (1,0,8,9); 
insert into bla VALUES (2,0,9,10); 
insert into bla VALUES (3,0,10,11); 
insert into bla VALUES (4,2,11,12); 
insert into bla VALUES (5,2,12,13); 
insert into bla VALUES (6,2,13,14); 
insert into bla VALUES (7,3,14,15); 
insert into bla VALUES (8,3,16,16); 

,你想要的是SQL:

SELECT masterbla.products_id,masterbla.products_master,masterbla.x,masterbla.y, group_concat(minorbla.products_id) 
FROM bla AS masterbla INNER JOIN bla AS minorbla ON masterbla.products_id=minorbla.products_master 
WHERE masterbla.products_master=0 
GROUP BY masterbla.products_id 

SQL FIDDLE

編輯:如果你也想取得與產品ID進入 '1'(主入口沒有次要條目)使用這一個,而不是:

SELECT masterbla.products_id,masterbla.products_master,masterbla.x,masterbla.y, group_concat(minorbla.products_id) 
FROM bla AS masterbla LEFT JOIN bla AS minorbla ON masterbla.products_id=minorbla.products_master 
WHERE masterbla.products_master=0 
GROUP BY masterbla.products_id 
+1

我真的很喜歡你的答案。非常簡單並且佈置得很好:) – user1942793 2014-10-22 11:51:54

+0

感謝您的更新版! – user1942793 2014-10-22 15:57:57

相關問題