Mysql 查询以获取主要产品和变量

Mysql query to get main product and variables

我正在处理这种情况:

  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'

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

你可以使用 union all

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

好吧,你的解释有点糟糕,如果你接受这个答案很好,但请改写你的问题,但我认为你是在问这个:

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

也就是table的隐含关系。如果您正在寻找产品 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

希望对您有所帮助,但请更新您的 post :)