2009-06-13 12 views
3

夜遅くに私を逃していると思う簡単なMySQLクエリ質問があります。私は、一連のデータ(注文)のインスタンスの数を数え、注文自体の上にいくつかのレベルの親に存在する値でそれらのインスタンスをグループ化するSELECTを実行しようとしています。例えばMySQLの複数レベルの親の選択/参加の質問

SELECT COUNT(orders.id)、受注、カテゴリWHERE 受注FROM区分 :私が何を探しています何

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; 

は、近傍のものです。 customer_id in(1,2,3)GROUP BY orders.productId.productGroupId.categoryId

カテゴリー1の商品は17件、カテゴリー2の商品は2件、カテゴリー3の214件の注文があると仮定すると、 tは私はバックを取得するために願っています:

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 

をためずにCOUNT(*)はproductgroupsの数に応じて、1つまたは複数を返すだろうが、数(orders.id)は、0を返し、製品。

内部結合では、注文のないカテゴリはカウントされません。

+0

本当にありがとうございます! – DarkSquid