2014-09-27 237 views
0

我遇到了一個mysql查詢的問題。我想要有一個父級的多級子ID。所以如果父母的ID是18,那麼我想要孩子ID爲18,如果有另一個孩子的級別,那麼我想他們以及基於類型IDMySQL連接查詢問題

我的表格結構如下 - 頁面表

id  title    parent_id  type_id 

18  About Us   0    4 
19  Child 1   18    6 
20  child 2   18    7 
21  child 3   18    1 
22  sub child 1  21    14 
23  sub child 2  21    14 
24  sub child 3  21    15 

二表 - page_types

id   typetitle 

6   one column 
7   two column 
14   slider 

我的期望輸出應該是

id  title    parent_id  type_id  typetitle 

19  Child 1   18    6    one column 
20  child 2   18    7    two column 
22  sub child 1  21    14    slider 
23  sub child 2  21    14    slider 

我的查詢是

SELECT 
    p.id AS childid, 
    p.title AS ptitle, 
    pt.typetitle as page_type_title 
    FROM pages AS p,page_types as pt 
    where p.type_id in (6,7,14) and p.parent_id=18 and p.type_id = pt.id 

但我只得到了2行(19和20),而不是22和23

+1

您需要刪除:p.parent_id = 18 – 2014-09-27 11:26:11

+0

我不能,因爲我需要父ID 18和21所有的孩子,但根據在類型編號 – Raj 2014-09-27 11:39:59

回答

1

你似乎想樹的楓葉,但沒有中間節點。試着這樣做:

SELECT p.id AS childid, p.title as ptitle, pt.typetitle as page_type_title 
FROM pages p join 
    page_types pt 
    ON p.type_id = pt.id 
WHERE p.type_id in (6, 7, 14) and 
     NOT EXISTS (SELECT 1 FROM pages p2 WHERE p2.parent_id = p.id); 

Here是SQL小提琴顯示動作查詢。

+0

謝謝戈登,但我現在得到所有的ID,無論我在哪個子頁面。沒有任何方法可以獲得ID 19,20,22和23. – Raj 2014-09-27 11:41:45

+0

@Raj。 。 。這就是這個查詢返回的內容。看看SQL小提琴。 – 2014-09-27 11:57:35

+0

當我運行SQL它沒有顯示任何東西在小提琴...我也試過它在我的本地phpmyadmin但它是相同的以前可能是從我的一端是錯誤的。 – Raj 2014-09-27 12:20:31

0

我認爲這是你搜索一下它是什麼:

SELECT * FROM pages AS p INNER JOIN types AS t ON p.type_id = t.id WHERE p.type_id in (6,7,14) and p.parent_id <> 0