2016-10-25 8 views
1

私はwoocomerceプラットフォームを使用していますが、商品名の重複したエントリがあります。ここでは、ユーザーグループが特定のカテゴリ名で入力した「product_name」の重複したcategories_id、categories_name、products_nameが表示されます。sqlを使用してwoocomerceで重複する製品を選択する方法

-------------------------- 
    | categories_description | 
    -------------------------- 
    categories_id(PK) 
    categories_name 

    ----------------------- 
    | products_description | 
    ----------------------- 
    products_id 
    products_name 


    ---------------------- 
    |products_to_categories | 
    ----------------------- 
    products_id 
    categories_id 

マイクエリ:

SELECT prod.products_id, `products_name`, categories_name,  
    prodcat.categories_id , count(*) c 
    FROM 
    (products_description AS prod INNER JOIN products_to_categories AS    
    prodcat ON prod.products_id=prodcat.products_id) 
    INNER JOIN 
    categories_description AS catdesc ON  
    catdesc.categories_id=prodcat.categories_id AND categories_name= 'CARD 
    HOLDERS' 
    GROUP BY products_name 
    order by categories_name 
下の表のスキーマに基づいて

私は、データベーステーブルの上に見ての通り、ここで結果を表示するために必要なテーブルがあります

私の質問の問題は、は、商品名の重複したエントリのリストを表示することができません。

example Inputs: 

products_description 
--------------------------- 
products_id | products_name 
     1   pens 
     2   pens 
     3   cars 
     4   cars 
     5   cars 
     6   burgers 

products_to_categories 
    ------------------------------- 
    products_id | categories_id 
     1     1 
     2     1 
     3     2 
     4     2 
     5     2 
     6     3  

    categories_description 
    ------------------------------ 
    categories_id | categories_name 
     1    School Supply 
     2    Vehicles 
     3     Foods 

    ================================= 
    Expected Output 
    ================================= 
    products_name categories_name categories_id  total_count 
     pens   School Supply   1    2 
     cars   Vehicles    2    3 
     burgers   Foods    3    1 

合計数をご覧ください。製品の出現数によって異なります。説明表

お手数ですが、ここで

+0

私は、サブクエリで 'SELECT'が表示されません。あなたの質問は実行されますか?サンプル入力と希望する出力を表示します。 –

+0

変更された質問をサンプルでご覧ください。 – smzapp

答えて

0

がなければならない仕事 ...

SELECT t1.products_name, 
     MAX(t3.categories_name) AS catgories_name, 
     MAX(t2.categories_id) AS categories_id, 
     COUNT(*) AS total_count 
FROM products_description t1 
INNER JOIN products_to_categories t2 
    ON t1.products_id = t2.products_id 
INNER JOIN categories_description t3 
    ON t2.categories_id = t3.categories_id 
GROUP BY t1.products_name 

クエリです...しかし、このクエリは正しい出力を与えるべきであるにもかかわらず、データベース設計は、いくつかの欠点があります。各製品のエントリをカテゴリテーブルの別のエントリにマッピングする代わりに、重複する製品には重複したIDが付いている必要があります。これらのIDはすべて同じカテゴリにマッピングされます。要するに、あなたのデータベースは適切に正規化されていないので、私のクエリは、すべての値が同じであると仮定して、特定の列のMAXを取るなど、いくつかの良いものに頼ります。ここで

は、私はあなたのスキーマを変更する方法を次のとおりです。

products_description 

╔════╦═════════════╦═══════════════╗ 
║ id ║ products_id ║ products_name ║ 
╠════╬═════════════╬═══════════════╣ 
║ 1 ║  1  ║  pens  ║ 
║ 2 ║  1  ║  pens  ║ 
║ 3 ║  2  ║  cars  ║ 
║ 4 ║  2  ║  cars  ║ 
║ 5 ║  2  ║  cars  ║ 
║ 6 ║  3  ║  burgers ║ 
╚════╩═════════════╩═══════════════╝ 

products_to_categories 

╔═════════════╦═══════════════╗ 
║ products_id ║ categories_id ║ 
╠═════════════╬═══════════════╣ 
║  1  ║  1  ║ 
║  2  ║  2  ║ 
║  3  ║  3  ║ 
╚═════════════╩═══════════════╝ 

あなたの第三のテーブルがあるとして残ることができます。

categories_description 

╔═══════════════╦═════════════════╗ 
║ categories_id ║ categories_name ║ 
╠═══════════════╬═════════════════╣ 
║  1  ║ School Supply ║ 
║  2  ║ Vehicles  ║ 
║  3  ║ Foods   ║ 
╚═══════════════╩═════════════════╝ 
関連する問題