MySQL查询得到的主要产品和变量

MySQL查询得到的主要产品和变量

问题描述:

我处理这种情况:MySQL查询得到的主要产品和变量

ID | PostParent | PostType   | 
---------------------------------------------- 
001 | NULL  | 'product' 
002 | 001  | 'product_variation' 
003 | 001  | 'product_variation' 
004 | NULL  | 'product' 
005 | 004  | 'product_variation' 
006 | 004  | 'product_variation' 

我需要执行一个查询,对于一个给定的ID输出

ID | PostParent | PostType    
------------------------------------------- 
001 | NULL  | 'product' 
002 | 001  | 'product_variation' 
003 | 001  | 'product_variation' 

目的是在单个产品页面中输出产品信息和其变体列表(如果存在)。

+0

我执行下列操作之一 - - >选择 p.id, p.post_parent, p.post_type FROM mg_posts为p WHERE p.post_parent = p.id Alex

+2

我不理解你怎么样根据您的预期产量生成。 –

+1

为什么005和006从结果中排除? – Shadow

你可以使用UNION ALL

select ID, PostParent, PostType 
    from mg_posts 
    where ID = '001' 
    UNION ALL 
    SELECT id, post_parent, ost_type 
    FROM mg_posts 
    WHERE p.post_parent= '001' 
+0

好吧我要测试它 – Alex

+0

它明确地给了我我需要的东西。 – Alex

嗯,你的解释是有点差,如果你接受这个答案很好,但请改写你的问题,但我想你问的是:

SELECT mg1.*, mg2.* FROM mg_posts mg1 LEFT JOIN mg_posts mg2 ON mg2.PostParent = mg1.ID 

这就是表格的隐式关系。如果你正在寻找的产品ID = 1,那么你会进一步细化查询:

SELECT mg1.*, mg2.* FROM mg_posts mg1 LEFT JOIN mg_posts mg2 ON mg2.PostParent = mg1.ID WHERE mg1.ID = 1; -- the one I know to get 

LEFT JOIN保证你会得到的产品,即使他们没有变型产品。合理?如果您只希望产品具有变化,或者只有110%确定所有产品在进入时具有变化(我的意思是110%),您才会使用JOIN

如果你想为你做列表上的一个排的一切,你可以这样做:

SELECT * FROM mg_posts WHERE (ID = 1 AND PostParent IS NULL) OR PostParent = 1 

希望帮助,但更新后:)

+0

奥利弗,我在最后一部分实现了我的原创帖子 – Alex