Добрый день
Есть 2 таблицы:
CREATE TABLE `category` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`parent` INT(10) NULL DEFAULT NULL,
`name` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
CREATE TABLE `value` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`parent` INT(10) NULL DEFAULT NULL,
`value` INT(10) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
В первой таблице находятся категории, во второй некоторые значения, примерное содержание таблиц:
INSERT INTO `category` (`id`, `parent`, `name`) VALUES (1, 0, 'cat1'), (2, 1, 'cat2'), (3, 1, 'cat3'), (4, 0, 'cat4'), (5, 4, 'cat5'), (6, 4, 'cat6');
INSERT INTO `value` (`id`, `parent`, `value`) VALUES (1, 2, 1), (2, 3, 2), (3, 2, 3), (4, 5, 4), (5, 6, 5), (6, 2, 6);
есть родительские и подчиненные категории,
А теперь собственно говоря проблема, как посчитать сумму для родителей сумму подчиненных категорий и сумму каждой категории одним запросом?
для наглядности ожидаемый результат
id | parent | name | sum
1 | 0 | cat1 | 12
2 | 1 | cat2 | 10
3 | 1 | cat3 | 2
4 | 0 | cat4 | 9
5 | 4 | cat5 | 4
6 | 4 | cat6 | 5
пробовал
SELECT t.* , SUM(t2.value) as sum FROM category t LEFT JOIN value t2 ON ( t.parent = t2.parent OR t.id = t2.parent ) GROUP BY IF(t.parent = 0 , t.parent , t.id) ORDER BY t.parent , t.id
но выводит:
id | parent | name | sum
1 | 0 | cat1 | NULL
2 | 1 | cat2 | 10
3 | 1 | cat3 | 2
5 | 4 | cat5 | 4
6 | 4 | cat6 | 5