2014-09-27 178 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