2009-06-13 20 views
3

我有一個希望簡單的MySQL查詢問題,這個問題在深夜無法解決。我正在嘗試做一個SELECT來計算一組數據(訂單)的實例數量,並將這些實例按照在父級上存在的值存儲在訂單本身以上的幾個級別中。MySQL多級別父級選擇/加入問題

例如:

CREATE TABLE `so_test`.`categories` (
    `id` int(10) unsigned NOT NULL auto_increment, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=572395 DEFAULT CHARSET=latin1; 

CREATE TABLE `so_test`.`product_group` (
    `id` int(10) unsigned NOT NULL auto_increment, 
    `category_id` int(10) unsigned NOT NULL auto_increment, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=572395 DEFAULT CHARSET=latin1; 

CREATE TABLE `so_test`.`products` (
    `id` int(10) unsigned NOT NULL auto_increment, 
    `product_group_id` int(10) unsigned NOT NULL auto_increment, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=572395 DEFAULT CHARSET=latin1; 

CREATE TABLE `so_test`.`orders` (
    `id` int(10) unsigned NOT NULL auto_increment, 
    `product_id` int(10) unsigned NOT NULL auto_increment, 
    `customer_id` int(10) unsigned NOT NULL auto_increment, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=572395 DEFAULT CHARSET=latin1; 

什麼我希望做的東西在附近:

SELECT COUNT(orders.id)的categoryId 從接單,類別WHERE 訂單。 (1,2,3)GROUP BY orders.productId.productGroupId.categoryId中的customer_id

假設有1類產品的訂單有17件,2類產品有2件訂單,3類有214件訂單,所以wha T I很希望得到的回覆是:

count(orders.id), categoryId 
============================ 
     17    1 
     2    2 
     214    3 

如果我試圖通過說PRODUCT_ID我會fine..but兩個層次增厚部被扔我組。

謝謝!

回答

4

就加入他們一起:

select categoryid, count(orders.id) 
from category c 
left join product_group pg on pg.category_id = c.id 
left join products on p on p.product_group_id = pg.id 
left join orders o on o.product_id = p.id 

對於無類的順序,計數(orders.id)將返回0,而COUNT(*)將返回一個或更多,這取決於productgroups的數量和產品。

內部連接不會計算沒有訂單的類別。

+0

的確 - 謝謝! – DarkSquid 2009-06-13 18:56:37