【发布时间】:2015-03-26 00:50:58
【问题描述】:
我有一个用于跟踪点击的菜单的数据库。菜单有类别和子类别,我正在尝试获取每个类别的点击量,但在数据库中,如果项目在一个中,点击将注册到子类别,否则点击计入类别。我有一个查询将获得所有子类别的点击(category_type3),但我需要将它们与来自其父类别的点击一起添加(category_type2)。有一个名为CategoryHierarchy 的表将每个类别映射到它的父类别。这就是我所拥有的:
SELECT IFNULL(SUM(`MenuEntryAnalytics`.`opened`), 0) AS `clicks`,
`Categories`.`id`,
`Categories`.`name`,
`Categories`.`category_type`,
`CategoryHierarchy`.`parent_id` AS `parent`
FROM `MenuEntryAnalytics`
INNER JOIN `MenuEntries`
ON `MenuEntryAnalytics`.`menu_entry_id` = `MenuEntries`.`id`
LEFT JOIN `MenuEntryToCategory`
ON `MenuEntryAnalytics`.`menu_entry_id` = `MenuEntryToCategory`.`menu_entry_id`
RIGHT JOIN `Categories`
ON `MenuEntryToCategory`.`category_id` = `Categories`.`id`
RIGHT JOIN `CategoryHierarchy`
ON `Categories`.`id` = `CategoryHierarchy`.`category_id`
WHERE `Categories`.`category_type` = 3
GROUP BY `id`;
结果:
clicks id name type parent
=============================================
2032 3 Appetizers 3 2
455 4 Salads 3 2
680 6 Sandwiches 3 5
424 7 Burgers 3 5
584 9 Pizza 3 8
466 10 Kids Menu 3 8
1445 12 Soda 3 11
1089 13 Signature Cocktails 3 11
391 14 Bottled Beer 3 11
167 15 Wine 3 11
0 17 Events 3 16
0 18 Sponsors 3 16
186 19 Dessert 3 11
621 26 Restaurants 3 22
263 27 Bars 3 22
112 28 Services 3 25
254 29 Amenities 3 25
67 30 Exclusive Benefits 3 25
190 31 Area Attractions 3 24
14 32 Entertainment 3 24
2 33 Shopping 3 24
117 34 Transportation & Tours 3 24
471 35 Mixed Drinks 3 11
541 36 Draft Beer 3 11
如果我 GROUP BY parent 那么我可以获得我需要的大部分内容(来自每个类别的子类别的所有点击)但这不会将点击计入类别(与子类别相反,即 @987654328 @2)。我一直在尝试添加该部分,我所能想到的只是使用子查询,但无法确定我正在查看哪个类别,因此我得到了一个包含多行的子查询。
PS 我无权重组数据库。
【问题讨论】:
-
你想得到
parent=2和type=2的总和吗? -
category_type = 3的点击总和是parent_id与category_type = 2的一个类别 -
所以所有
category_type = 3与parent_id相同的总和+与id相同的类别的点击次数等于parent_id
标签: mysql