1
我有一個包含以下字段(id,parent_id,name)的表'tags'。現在我已經在層次結構中設置了3個級別的限制,即:parent> child> subchild。子女不能有更多的孩子。所以我想查詢檢索記錄,如:在mysql中獲取父/子/子關係
家長數據 (如果父母有子)子數據 (如果孩子有subchild)subchild數據
我有一個包含以下字段(id,parent_id,name)的表'tags'。現在我已經在層次結構中設置了3個級別的限制,即:parent> child> subchild。子女不能有更多的孩子。所以我想查詢檢索記錄,如:在mysql中獲取父/子/子關係
家長數據 (如果父母有子)子數據 (如果孩子有subchild)subchild數據
試着這麼做:
SELECT tparent.id AS parent_id,
tparent.name AS parent_name,
tchild1.id AS child_id,
tchild1.name AS child_name,
tchild2.id AS subchild_id,
tchild2.name AS subchild_name
FROM tags tparent
LEFT JOIN tags tchild1
ON tparent.id = tchild1.parent_id
LEFT JOIN tags tchild2
ON tchild1.id = tchild2.parent_id
根據您的評論,你看以下的輸出:
ID | PARENT | NAME
1 | 0 | family
2 | 1 | male
3 | 2 | boy1
4 | 2 | boy2
5 | 1 | female
6 | 5 | girl1
我將認爲IDS不會永遠是我ñ這個順序,如果他們的原因,問題解決:)
我不確定你可以直接在SQL中實現這一點,而無需添加一些額外的信息,將用於排序。例如,你可以添加另一列來連接parent-child-subchild的id。例如:
-- parent
SELECT CONCAT(LPAD(id, 6, '0'), '-000000-000000') AS order_info,
id AS id,
parent_id AS parent,
name AS name
FROM tags
WHERE parent_id = 0
UNION
-- child
SELECT CONCAT_WS('-', LPAD(tparent.id, 6, '0'),
LPAD(tchild1.id, 6, '0'),
'000000'),
tchild1.id,
tparent.id,
tchild1.name
FROM tags tparent
INNER JOIN tags tchild1
ON tparent.id = tchild1.parent_id
WHERE tparent.parent_id = 0
UNION
-- subchild
SELECT CONCAT_WS('-', LPAD(tparent.id, 6, '0'),
LPAD(tchild1.id, 6, '0'),
LPAD(tchild2.id, 6, '0')),
tchild2.id,
tchild1.id,
tchild2.name
FROM tags tparent
INNER JOIN tags tchild1
ON tparent.id = tchild1.parent_id
INNER JOIN tags tchild2
ON tchild1.id = tchild2.parent_id
ORDER BY 1
請參閱the fiddle說明這一點。
在這裏,我格式化的ID保持排序連貫。這意味着知道ID的最大長度(我在這裏使用了6的長度),這從ID字段類型猜測是微不足道的。
是的,我已經使用了這個,但是這使我得到了一個單一記錄中的完整節點。即: 父 - >子1 - > subchild 父 - >子2 - > subchild 不過,我想找回這樣的記錄: 家長 孩子1 subchild 孩子2 subchild – user3093048 2014-09-13 09:43:52
請添加樣本輸出在你的問題中清楚地說明,但如果我理解你的需求,那麼你最好在你的表示層而不是SQL中做這件事。 – 2014-09-13 14:49:22
以下是我想要生成的輸出。當我搜索名爲「家庭」的標籤時,應按照以下順序檢索我的孩子和子孩子。 輸出: 'ID,父,名稱 1,0,家庭 2,1,雄性 3,2,請分享幫助 4,2,boy2 5,1,女性 6,5,girl1' 我可以通過使用聯接解決方案在表示層中執行此操作,但爲此我需要使用一些檢查來組織數據。但是,如果有可能產生上面的輸出,請你幫助我。在此先感謝 – user3093048 2014-09-13 20:56:11