递归算法查询无级树形结构下任意分类及其子分类下所有新闻想到用递归算法来实现无级树形分类下任意分类及
递归算法查询无级树形结构下任意分类及其子分类下所有新闻
想到用递归算法来实现无级树形分类下任意分类及其子分类下的所有新闻:
public class Category { private String id; private Category p_category; private String name; private Set children; private Set news; }
id的格式如下:001,001001,001002,002,002001等.
这样的话要查询子孙节点的数据不就可以用
from news where category.id like '001%'
public class Category { private String id; private Category p_category; private String name; private Set children; private Set news; }
id的格式如下:001,001001,001002,002,002001等.
这样的话要查询子孙节点的数据不就可以用
from news where category.id like '001%'
如果用这种,不如彻底一点。使用 string 类型,需要用 like 来实现查询。不如直接使用 int 作为 id ,整数中的不同 bit 作为不同级别的 id 。详细的做法可以参考
http://www.web745.com/article/303.htmlpublic class Category { private String id; private Category p_category; private String name; private Set children; private Set news; }
id的格式如下:001,001001,001002,002,002001等.
这样的话要查询子孙节点的数据不就可以用
from news where category.id like '001%'
这样编码结构确实清晰,也比较容易实现,而我最担心的是使用字符串做模糊查询,是否会影响效率呢? 6 楼 tear 2007-08-22 iunknown 写道
如果用这种,不如彻底一点。使用 string 类型,需要用 like 来实现查询。不如直接使用 int 作为 id ,整数中的不同 bit 作为不同级别的 id 。详细的做法可以参考
http://www.web745.com/article/303.html
根据iunknown提供的资料,尝试采取了这样的做法:ID字段保持不变,在分类里增加一个字段code bigint,最大值是2的64次方,分为8个深度级别的话,每一级可以包括256个项目。
把编码转换成2进制,前8位是第一级,与字符串型编码类似,用16进制来显示的话,01 00 00 00 00 00 00 00是第一级别。01 01 00 00 00 00 00 00是上一个分类的下级分类。下级的最高位都是相同的,因此如果我们希望取得某一分类极其所有子类下的所有新闻,可以使用from News where newsCategory.code>=01 00 00 00 00 00 00 00 and newsCategory.code<02 00 00 00 00 00 00 00。(不知道这样做是否跟iunknown所说到的方法一致?)
但现在对位运算编码和字符串编码的选择有很大疑惑,似乎字符串的更简单,而位运算相对就复杂了点。是否位运算与字符串比较,更有效率呢? 7 楼 rtdb 2007-08-22 > 是否位运算与字符串比较,更有效率呢?
TEST it!