2016-10-25 1 views
1

Я использую платформу woocomerce, и у меня есть повторяющиеся записи названия продукта. Теперь я хочу увидеть category_id, categories_name, products_name дублированного «product_name», введенного группой пользователей по определенному названию категории.Как выбрать дубликат продукта в woocomerce с помощью sql

Как я вижу на таблицах базы данных, вот необходимые таблицы для просмотра результата:

На основании схемы таблицы ниже:

-------------------------- 
    | 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 

Взгляните на общий счет. Это зависит от количества вхождений в таблице продуктов_description

Пожалуйста, помогите.

+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 

... но даже если этот запрос должен дать правильный вывод, ваша структура базы данных имеет некоторые недостатки. Вместо того, чтобы сопоставлять каждую запись продукта с отдельной записью в таблице категорий, дублированные продукты должны иметь дубликат идентификатора, все из которых относятся к одной и той же категории. Короче говоря, ваша база данных не нормализована должным образом, поэтому мой запрос прибегает к некоторым нехорошим вещам, например, принимая 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   ║ 
╚═══════════════╩═════════════════╝ 
Смежные вопросы