Здравствуйте уважаемые форумчане!
Подскажите пожалуста как сделать пересчет в категориях, при такой структуре таблиц:
CREATE TABLE IF NOT EXISTS `cats` (
`cats_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`cats_order` int(11) unsigned NOT NULL DEFAULT '0',
`cats_parent` int(11) unsigned NOT NULL DEFAULT '0',
`cats_parent_all` varchar(255) NOT NULL DEFAULT '',
`cats_name` varchar(100) NOT NULL DEFAULT '',
`cats_about` varchar(255) NOT NULL DEFAULT '',
`cats_count` mediumint(8) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`cats_id`),
KEY `cats_parent` (`cats_parent`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;
INSERT INTO `cats` VALUES
(1, 1, 0, '0', 'Категоия 1', '', 0),
(2, 2, 0, '0', 'Категоия 2', '', 0),
(3, 3, 1, '0,1', 'Под категоия 1', '', 0),
(4, 4, 1, '0,1', 'Под категоия 2', '', 0),
(5, 5, 1, '0,1', 'Под категоия 3', '', 0),
(6, 6, 3, '0,1,3', 'Под - под категоия 1', '', 0),
(7, 7, 3, '0,1,3', 'Под - под категоия 2', '', 0),
(8, 8, 3, '0,1,3', 'Под - под категоия 3', '', 0),
(9, 9, 6, '0,1,3,6', 'Под - под - под - категоия 1', '', 0),
(10, 10, 6, '0,1,3,6', 'Под - под - под - категоия 2', '', 0);
и таблица файлов, к примеру:
CREATE TABLE IF NOT EXISTS `files` (
`file_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`file_cats` int(11) unsigned NOT NULL DEFAULT '0',
`file_name` varchar(100) NOT NULL DEFAULT '',
`file_about` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`file_id`),
KEY `file_cats` (`file_cats`)
) ENGINE=MyISAM;
Записываю и удаляю так
$row = $db->selectRow("SELECT `cats_parent_all` FROM ?_cats WHERE `cats_id` = ?", $id);
$db->query("UPDATE ?_cats SET `cats_count` = (`cats_count` + 1) WHERE (`cats_id` IN(" . $row['cats_parent_all'] . ") OR `cats_id` = ?);", $id);
и вроде всё работает, но если обнулить `cats_count` или потребуется пересчитать, то перечитать обратно не как не могу....
Если например:
Под - под - под - категоия 1 = 5 файлов
Под - под - под - категоия 2 = 5 файлов
Под - под категоия 3 = 10 файлов
и вот сам вопрос, как подсчитать за пару-тройку запросов чтобы обновить записи `cats_count`
Категоия 1 = 20 файлов
Под - под категоия 1 = 10 файлов
Под - под - под - категоия 1 = 5 файлов
Под - под - под - категоия 2 = 5 файлов
Под - под категоия 3 = 10 файлов
Перебрал все варианты до которых мог додумался, а правильно так и не получилось...