Вот мое заявление:Как получить категории детей без детей из них?
SELECT (
COUNT(parent.categoryName) - (sub_tree.depth +1)) AS depth,
CONCAT(REPEAT('', (COUNT(parent.categoryName) - (sub_tree.depth +1))) , node.categoryName) AS categoryName
FROM
Categories AS node,
Categories AS parent,
Categories AS sub_parent,
(
SELECT node.categoryName, (
COUNT(parent.categoryName) -1) AS depth
FROM
Categories AS node,
Categories AS parent
WHERE
node.categoryLft BETWEEN parent.categoryLft AND parent.categoryRgt
AND node.categoryName LIKE 'Product'
GROUP BY node.categoryName
ORDER BY node.categoryLft
) AS sub_tree
WHERE
node.categoryLft BETWEEN parent.categoryLft AND parent.categoryRgt
AND node.categoryLft BETWEEN sub_parent.categoryLft AND sub_parent.categoryRgt
AND sub_parent.categoryName = sub_tree.categoryName
GROUP BY node.categoryName
ORDER BY node.categoryLft
Он отлично работает, но я хотел бы изменить его, чтобы получить только первые узлы рядом с выбранной категорией (здесь «Продукты») без детей из подкатегорий
Как: продукты:
TypeA
SubTypeA
SubTypeB
TypeB
Я хочу, чтобы получить 'TypeA', 'TypeB'.
Кстати, вот мой стол:
CREATE TABLE `Categories` (
`categoryId` int(11) NOT NULL auto_increment,
`categoryLft` int(11) NOT NULL,
`categoryRgt` int(11) NOT NULL,
`categoryName` varchar(255) default NULL,
`categoryAlias` varchar(255) default NULL,
PRIMARY KEY (`categoryId`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
Вопрос только в том, действительно ли нужен такой сложный механизм категоризации? Если это не я могу предоставить вам простой и достаточный для каждой таблицы категорий задач и запросов. –
Он будет использоваться для категоризации любых типов вещей, и у меня нет никаких идей о том, как будут выглядеть категории, у меня есть только одно правило: «категория может иметь много подкатегорий». Он будет использоваться для централизации категорий независимо от категоризированных объектов. (Это могут пользователи, статьи, продукты и т. Д.) Но я все еще открыт для любых новых хороших идей ... –