类别和子类别

类别和子类别

问题描述:

我发现这个教程http://sqllessons.com/categories.html,我想用所描述的方法,因为它不是一个递归调用的更好,但我有两个问题:类别和子类别

  1. 我怎么知道最深的水平?在某些页面中,我可能有2个,而在另一个页面中,我可能有20个。我错过了什么,或者只有在知道运行前的最深层次时才能使用此方法!

  2. 我有一个多语言数据库的设计,我怎么能更改下面的查询与我的表设计工作:


CREATE TABLE `categories` (
    `id` int(11) NOT NULL, 
    `position` int(11) DEFAULT NULL, 
    `parent_id` int(11) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `parent_id_fk` (`parent_id`), 
    CONSTRAINT `categories_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `categories` (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CREATE TABLE `categories_locale` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `slug` varchar(100) NOT NULL DEFAULT '', 
    `name` varchar(40) NOT NULL DEFAULT '', 
    `category_id` int(11) NOT NULL, 
    `locale_id` smallint(5) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

您的帮助将不胜感激。

+0

您可能想要提供该链接的概述。这有点长,大多数人不会在回答你的问题之前阅读它。 – 2011-12-29 22:58:30

+0

您是否在寻找完全在数据库中编码的解决方案?另外,您参考的教程假定已知深度,结果集中的列数取决于此深度。如果您的深度未知,您可能只需返回双列父/子ID,并让消费代码处理动态深度。如果你能澄清你在找什么,我可能会帮助更多。 – 2011-12-29 23:02:53

你可能要考虑研究'嵌套集'。嵌套集上的这个article是一个很好的开始。另外,如果您使用的是ORM(例如,学说),则支持嵌套设置功能。