2012-08-23 72 views
1

我試圖結合這組queries。 我已經完成搜索,但我的queries有一些joins,它變得複雜,有人可以幫忙嗎?結合多個計數

select count(DISTINCT p.products_id) as count from (products p) 
          join (products_to_categories p2c) 
           on (p.products_id = p2c.products_id) 
          left join (specials s) 
           on (p.products_id = s.products_id) 
          left join (products_attributes pa) 
           on (p.products_id = pa.products_id) 
          left join (products_options_values pv) 
           on (pa.options_values_id = pv.products_options_values_id) 
          left join (products_stock ps) 
           on (p.products_id=ps.products_id and pv.products_options_values_id = ps.products_options_values_id2)   
               INNER JOIN products_specifications ps10 ON p.products_id = ps10.products_id INNER JOIN products_specifications ps17 ON p.products_id = ps17.products_id where p.products_status = '1' and ps.products_stock_quantity>0 and p2c.categories_id in (72,1,23,47,48,49,74,24,33,34,35,77,25,46,45,44,40,41,42,43,76,78,83,50,52,81,79,2,54,60,82,53,57,58,55,61,62,63,75,56,64,65,66,67,68,69,70,71,84,80) AND ps10.specification in ('Meisje') AND ps10.specifications_id = '10' 
         AND ps10.language_id = '1' 
         and products_options_values_name in (80,"18M/80cm","8-12 mnd","9m","12m","9-12m","9M","12M") AND ps17.specification in ('Overhemd', 'Polo') AND ps17.specifications_id = '17' 
         AND ps17.language_id = '1' 

select count(DISTINCT p.products_id) as count from (products p) 
          join (products_to_categories p2c) 
           on (p.products_id = p2c.products_id) 
          left join (specials s) 
           on (p.products_id = s.products_id) 
          left join (products_attributes pa) 
           on (p.products_id = pa.products_id) 
          left join (products_options_values pv) 
           on (pa.options_values_id = pv.products_options_values_id) 
          left join (products_stock ps) 
           on (p.products_id=ps.products_id and pv.products_options_values_id = ps.products_options_values_id2)   
               INNER JOIN products_specifications ps10 ON p.products_id = ps10.products_id INNER JOIN products_specifications ps17 ON p.products_id = ps17.products_id where p.products_status = '1' and ps.products_stock_quantity>0 and p2c.categories_id in (72,1,23,47,48,49,74,24,33,34,35,77,25,46,45,44,40,41,42,43,76,78,83,50,52,81,79,2,54,60,82,53,57,58,55,61,62,63,75,56,64,65,66,67,68,69,70,71,84,80) AND ps10.specification in ('Jongen') AND ps10.specifications_id = '10' 
         AND ps10.language_id = '1' 
         and products_options_values_name in (80,"18M/80cm","8-12 mnd","9m","12m","9-12m","9M","12M") AND ps17.specification in ('Overhemd', 'Polo') AND ps17.specifications_id = '17' 
         AND ps17.language_id = '1' 

select count(DISTINCT p.products_id) as count from (products p) 
          join (products_to_categories p2c) 
           on (p.products_id = p2c.products_id) 
          left join (specials s) 
           on (p.products_id = s.products_id) 
          left join (products_attributes pa) 
           on (p.products_id = pa.products_id) 
          left join (products_options_values pv) 
           on (pa.options_values_id = pv.products_options_values_id) 
          left join (products_stock ps) 
           on (p.products_id=ps.products_id and pv.products_options_values_id = ps.products_options_values_id2)   
               INNER JOIN products_specifications ps10 ON p.products_id = ps10.products_id INNER JOIN products_specifications ps17 ON p.products_id = ps17.products_id where p.products_status = '1' and ps.products_stock_quantity>0 and p2c.categories_id in (72,1,23,47,48,49,74,24,33,34,35,77,25,46,45,44,40,41,42,43,76,78,83,50,52,81,79,2,54,60,82,53,57,58,55,61,62,63,75,56,64,65,66,67,68,69,70,71,84,80) AND ps10.specification in ('Unisex') AND ps10.specifications_id = '10' 
         AND ps10.language_id = '1' 
         and products_options_values_name in (80,"18M/80cm","8-12 mnd","9m","12m","9-12m","9M","12M") AND ps17.specification in ('Overhemd', 'Polo') AND ps17.specifications_id = '17' 
         AND ps17.language_id = '1' 
+1

這些查詢有什麼不同?也請粘貼你的預期輸出。 –

+0

什麼樣的SQL? – podiluska

+0

它的MySQL,所述differene是ps10.specification在( 'Meisje'),在ps10.specification( 'Jongen'),在ps10.specification( '中性') –

回答

0

我想出了這一點,似乎上班

輸出爲

count1 count2 count3 
------------------------ 
    10  0  2 

@約翰賓厄姆「您查詢包含有點冗餘」

你能幫我做這個查詢有點少冗餘?

select 
    count(DISTINCT if(ps10.specification in ('Meisje'),p.products_id,NULL)) as count1, 
    count(DISTINCT if(ps10.specification in ('Jongen'),p.products_id,NULL)) as count2, 
    count(DISTINCT if(ps10.specification in ('Unisex'),p.products_id,NULL)) as count3 
from 
    (products p) 
join 
    (products_to_categories p2c) on (p.products_id = p2c.products_id) 
left join 
    (specials s) on (p.products_id = s.products_id) 
left join 
    (products_attributes pa) on (p.products_id = pa.products_id) 
left join 
    (products_options_values pv) on (pa.options_values_id = pv.products_options_values_id) 
left join 
    (products_stock ps) on (p.products_id = ps.products_id 
         and pv.products_options_values_id = ps.products_options_values_id2)  
inner join 
    products_specifications ps10 ON p.products_id = ps10.products_id 
where 
    p.products_status = '1' 
    and ps.products_stock_quantity > 0 
    and p2c.categories_id in (72,1,23,47,48,49,74,24,33,34,35,77,25,46,45,44,40,41,42,43,76,78,83,50,52,81,79,2,54,60,82,53,57,58,55,61,62,63,75,56,64,65,66,67,68,69,70,71,84,80) 
    and ps10.specifications_id = '10' 
    and ps10.language_id = '1' 
0

好了,你的查詢包含有點冗餘,因爲他們加入的是在選擇和where子句中未使用的兩個表。我在下面的解決方案中刪除了這些內容。我還重新組織了其餘的連接,將所有強制連接放在任何可選連接之前。

select ps10.specification, count(DISTINCT p.products_id) as [count] 
from products p 
    join products_to_categories p2c on p.products_id = p2c.products_id 
    join products_specifications ps10 ON p.products_id = ps10.products_id 
    join products_specifications ps17 ON p.products_id = ps17.products_id 
    left join products_stock ps on p.products_id=ps.products_id and pv.products_options_values_id = ps.products_options_values_id2 
where p.products_status = '1' and ps.products_stock_quantity > 0 
    and p2c.categories_id in (72,1,23,47,48,49,74,24,33,34,35,77,25,46,45,44,40,41,42,43,76,78,83,50,52,81,79,2,54,60,82,53,57,58,55,61,62,63,75,56,64,65,66,67,68,69,70,71,84,80) 
    and ps10.specification in ('Meisje', 'Jongen', 'Unisex') 
    and ps10.specifications_id = '10' 
    and ps10.language_id = '1' 
    and products_options_values_name in (80,"18M/80cm","8-12 mnd","9m","12m","9-12m","9M","12M") 
    and ps17.specification in ('Overhemd', 'Polo') 
    and ps17.specifications_id = '17' 
    and ps17.language_id = '1' 
GROUP BY ps10.specification 
ORDER BY ps10.specification 

這將產生以下輸出:

specification | count 
Jongen   93 
Maisje   245 
Unisex   36 

(以及數字可能有點假的)

希望這有助於

+0

我得到這個錯誤#1054 - 'where子句'中的未知列'products_options_values_name' –