2017-08-11 54 views
0

我的情況下,我需要的以下信息:MySQL查詢 - 顯示了一個產品的第二分類攔住了我

  1. ID(posts.ID)
  2. TITLE(posts.title)
  3. SKU(postmeta.metakey = '_sku') - >存儲在(postmeta.metavalue)
  4. PRICE(postmeta.metakey = 'REGULAR_PRICE')值 - >存儲在(postmeta.metavalue)
  5. 品牌價值(terms.name WHERE term_taxonomy_term.taxonomy ='產品_cat ')
  6. CATEGORY(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 

任何幫助解決這個問題?

+0

您與品牌有什麼問題?請[mcve]。 '屬於同一列「postemeta.metakey」,其中相關的值在「postemeta.metavalue」 '不明確。同上你的描述5和6(雖然我可以弄清楚代碼中的內容,請這樣做,然後用它來代替)PS不應該說「='product_brand'」&6說「=」 'product_cat'「?和「mg_taxonomy_term」? – philipxy

+0

https://stackoverflow.com/q/45250646/3404097可能存在重複。 (雖然你正在使用不同的聚合。)(請參閱我的答案。) – philipxy

回答

0

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」和他們的名字被存儲在terms.term_id 。

現在的任務是拿到結果分開列

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

解決這個我一直在開發之後的事情。

0

對誰有興趣我發現最終的解決方案來獲取我需要的信息。

SELECT 
    p.id, 
    p.post_title, 
    p.post_status, 
    MAX(CASE WHEN t.taxonomy = 'product_cat' then tr.name ELSE NULL END) as category, 
    MAX(CASE WHEN t.taxonomy = 'product_brand' then tr.name ELSE NULL END) as brand, 
    MAX(CASE WHEN pm.meta_key = '_sku' then pm.meta_value ELSE NULL END) as sku, 
    MAX(CASE WHEN pm.meta_key = '_price' then pm.meta_value ELSE NULL END) as price 
    FROM mg_posts as p 
    LEFT JOIN mg_term_relationships as r ON r.object_id=p.id 
    JOIN mg_term_taxonomy as t ON t.term_taxonomy_id=r.term_taxonomy_id 
    JOIN mg_terms as tr ON tr.term_id=t.term_id 
    JOIN mg_postmeta pm ON (pm.post_id = p.ID) 
    WHERE P.post_type='product' 
    GROUP BY P.ID 

希望它能幫助!