我处于需要以下信息的情况:


ID(posts.ID)
标题(posts.title)
SKU(postmeta.metakey ='_sku')->存储在(postmeta.metavalue)中的值
PRICE(postmeta.metakey ='regular_price')->存储在(postmeta.metavalue)中的值
品牌(terms.name,WHERE term_taxonomy_term.taxonomy =“ product_cat”)
类别(terms.name,WHERE term_taxonomy_term.taxonomy =“品牌”)


SKUPRICE属于同一列“ postemeta.metakey”,其相关值位于“ postemeta.metavalue”中。

BRANDCATEGORY属于同一列“ terms.name”,但它们在“ term_taxonomy.taxonomy”中定义了不同的分类法,分别为(“ product_brand”和“ product_cat”)。

通过在下面的查询中进行开发,我能够收集除BRAND(terms.name)之一之外的所有信息。

   SELECT p.ID
          , MAX(CASE WHEN pm1.meta_key = '_sku'
                     THEN pm1.meta_value
                     ELSE NULL END) AS sku
          , p.post_title
          , t.name AS product_category
          , MAX(CASE WHEN pm1.meta_key = '_price'
                     THEN pm1.meta_value
                     ELSE NULL END) AS price
     FROM mg_posts p
LEFT JOIN mg_postmeta AS pm1
       ON pm1.post_id = p.ID
LEFT JOIN mg_term_relationships AS tr
       ON tr.object_id = p.ID
     JOIN mg_term_taxonomy AS tt
       ON tt.taxonomy = 'product_cat' AND tt.term_taxonomy_id = tr.term_taxonomy_id
     JOIN mg_terms AS t
       ON t.term_id = tt.term_id
    WHERE p.post_type IN ('product', 'product_variation')
    GROUP BY p.ID, p.post_title


对解决此问题有帮助吗?

最佳答案

Philipxy,我认​​为最好是循序渐进,专注于这个问题。

类别和品牌的存储方式相同:

TERMS            TERM_TAXONOMY          TERM_RELATIONSHIP          PRODUCT
---------------------------------------------------------------------------
term_id  ---->   term_id                product_id      --->   product_id
name             †erm_taxonomy_id   --> term_taxonomy_id
                 taxonomy


在term.taxonomy.taxonomy中将品牌和类别标识为“ product_brand”和“ product_cat”,其名称存储在term.term_id中。

现在的任务是在单独的列中获取结果

|ProductID |   Brand    |     Category      |
---------------------------------------------
| 001      |    Levis   |     Men Jeans     |


解决此问题后,我将继续研究此事。

10-08 02:21