Pierwowzorem w kategoriach N zagłębienia dla mnie są duże serwisy takie jak allegro, amazon, beltal, alibaba, ebay itp.
Chciałem stworzyć coś co będzie działać w/g zasad jakie panują na allegro. Udało mi się zmontować następujące rzeczy:
Struktura tabeli w bazie danych:
CREATE TABLE IF NOT EXISTS `categories` (
`CAT_Id` int(11) NOT NULL AUTO_INCREMENT,
`PARENT_Id` int(11) NOT NULL DEFAULT '0',
`CAT_Name` varchar(155) NOT NULL,
`CAT_Url` varchar(75) NOT NULL,
`CAT_Description` varchar(255) NOT NULL,
`CAT_Sort` int(11) NOT NULL DEFAULT '0',
`CAT_Counter` int(11) NOT NULL,
`CAT_Active` int(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`CAT_Id`),
KEY `INDEX_GLOWNY` (`CAT_Id`,`PARENT_Id`,`CAT_Counter`,`CAT_Active`) USING BTREE,
KEY `SORT` (`PARENT_Id`,`CAT_Sort`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=106 ;
Oraz zapytanie które obsługuje:
SELECT
`CAT_Id` AS `id`,
`PARENT_Id` AS `parent`,
`CAT_Name` AS `name`,
`CAT_Url` AS `url`,
`CAT_Counter` AS `licznik`
FROM
`categories` AS `c`
WHERE
(
(`c`.`CAT_Active` = 1)
AND (`c`.`CAT_Counter` > 0)
)
AND (
(`c`.`CAT_Id` = {#ID})
OR (`c`.`PARENT_Id` = {#ID})
OR (`c`.`PARENT_Id` = (
SELECT
`c2`.`CAT_Id`
FROM
`categories` AS `c2`
WHERE
(`c2`.`CAT_Id` = (
SELECT
`c3`.`PARENT_Id`
FROM
`categories` AS `c3`
WHERE
(`c3`.`CAT_Id` = {#ID})
LIMIT 1
)
)
LIMIT 1
)
)
OR (`c`.`PARENT_Id` = (
SELECT
`c3`.`PARENT_Id`
FROM
`categories` AS `c3`
WHERE
(`c3`.`CAT_Id` = {#ID})
LIMIT 1
)
)
)
ORDER BY
`c`.`PARENT_Id` ASC,
`c`.`CAT_Sort` ASC
W miejscu gdzie występuje ciąg {#ID} należy wprowadzić wybraną kategorie...
Licznik jest wyliczany cyklicznie w cronie raz na kilka minut...
Póki co chcę się dowiedzieć co sądzicie o takim czymś - dobrze czy źle?