2014-11-26 8 views
-2

Я пытаюсь найти наиболее покупаемые продукты, но только для учета отдельных идентификаторов пользователей. В основном мой клиент хочет прекратить дублировать покупки у одного и того же пользователя, чтобы они не могли повлиять на график/бестселлеров. Мне нужно подсчитать все элементы order_items для этого продукта, используя только идентификаторы Distinct users. В настоящее время результаты подсчитывают все order_items, поэтому Distinct не работает.mySql Distinct - группа по выпуску

Любая помощь и я буду благодарна.

Заранее спасибо

SELECT * 
    FROM 
     (SELECT DISTINCT 
       order_item_meta_3.meta_value as distinct_user_order_items_id, 
       order_item_meta_2.meta_value as product_id, 
       SUM(order_item_meta.meta_value) as item_quantity 
      FROM 
       wp_woocommerce_order_items as order_items 
       LEFT JOIN wp_woocommerce_order_itemmeta as order_item_meta 
        ON order_items.order_item_id = order_item_meta.order_item_id 
       LEFT JOIN wp_woocommerce_order_itemmeta as order_item_meta_2 
        ON order_items.order_item_id = order_item_meta_2.order_item_id 
       LEFT JOIN wp_woocommerce_order_itemmeta as order_item_meta_3 
        ON order_items.order_item_id = order_item_meta_3.order_item_id 
       LEFT JOIN wp_posts AS posts 
        ON order_items.order_id = posts.ID 
        LEFT JOIN wp_term_relationships AS rel 
         ON posts.ID = rel.object_ID 
        LEFT JOIN wp_term_taxonomy AS tax 
         USING(term_taxonomy_id) 
        LEFT JOIN wp_terms AS term 
         USING(term_id) 
      WHERE 
        posts.post_type = 'shop_order' 
       AND posts.post_status = 'publish' 
       AND tax.taxonomy = 'shop_order_status' 
       AND term.slug IN ('completed','processing','on-hold') 
       AND order_items.order_item_type = 'line_item' 
       AND order_item_meta.meta_key = '_qty' 
       AND order_item_meta_2.meta_key = '_product_id' 
       AND order_item_meta_3.meta_key = '_user_id' 
      GROUP BY 
       order_item_meta_2.meta_value 
      ORDER BY 
       item_quantity DESC) as order_table, 
     wp_posts 
     LEFT JOIN wp_postmeta as mk1 
      ON wp_posts.ID = mk1.post_id 
     LEFT JOIN wp_postmeta as mk2 
      ON wp_posts.ID = mk2.post_id 
    WHERE 
      order_table.product_id = wp_posts.ID 
     AND wp_posts.ID = mk1.post_id 
     AND mk1.meta_key = 'is_album' 
     AND mk1.meta_value = 0 
     AND mk2.meta_key = '_price' 
     AND mk2.meta_value = 0 
+0

Вы знаете, DISTINCT действует на все столбцы в SELECT, не так ли? – Strawberry

+0

добавить order_item_meta_3.meta_value для группировки по внутреннему выбору ... удалить отчетливые. – xQbert

+1

Большинство из них (оптимизировано как) INNER JOINs! Это было ваше намерение? – Strawberry

ответ

0

вам не нужно бы сделать сумму вне группировки. Вы должны материализовать определенный набор первых затем агрегировать его ...

так изменить первые несколько строк ...

SELECT distinct_user_order_items_Id, product_Id, sum(item_Quantity) as item_Quantity 
FROM (
SELECT 
     order_item_meta_3.meta_value as distinct_user_order_items_id, 
     order_item_meta_2.meta_value as product_id, 
     order_item_meta.meta_value as item_quantity 
+0

Сейчас я получаю только один ряд. Мне нужно это для group by product_id, чтобы я мог видеть, сколько раз этот продукт был продан и выводит график. Извиняюсь, если я не объясню это ясно. Вот обновленный запрос http://pastebin.com/bx9nMB9v – jamessy

Смежные вопросы