5 回答
TA贡献1842条经验 获得超12个赞
在没有想到更好的办法前,还是直接写入数据库吧~使用Parentid没有索引就会查的很慢了,建立索引的话也是硬盘开销。牺牲硬盘的成本比牺牲速度的成本要便宜。
另外,如果用Parentid,那么引用的帖子如果修改或者删除了怎么办?引用者说的话就无法知道其原意了。
—————
想了想,如果不用第一种方法。想到一个效率更高些的方法:
每个非引用贴的ID为整数x10000(假设最多9999个回复的情况下),如12345 0000
引用帖的ID为原帖ID+1 即 12345 0001 ,12345 0002 等等
这样,假如要得到ID为2220010的帖的所有引用时,只需要where id>=2220000 and id<= 2220010 就可以了。应该比递归快很多(ID为聚集索引)
(这样取出的顺序就和原来不一样了,不过可以 order by postTime,还可以加一些逻辑,保证对多个post引用一个post的时候只按最大的ID取一次)
(另外,假如有这么一种情况,一个论坛有很多分区,每个分区又可以有子分区,子分区还可以“无限”有子分区。 在这种情况下,也尽量不要用parentId即递归,而是考虑使用位域(flags))
TA贡献1827条经验 获得超8个赞
我想评论内容按照大小分为存储在数据库中和存储在文件中,大评论数据库中只存标志,标志指向内容所在的文件,在显示时异步加载数据库和文件中的评论。
递归这东西应该用到,不然怎么遍历评论的评论呢?
with as 就是个结果集别名,
with test as (select * from test)
select * from test where a=1;
你那个应该写成
employeeID 所在表为employee,ManagerID所在表为Manager
select * from employee as e,ManagerID as m where e.employeeID=1 and ManagerID<>null
TA贡献1856条经验 获得超17个赞
- 5 回答
- 0 关注
- 631 浏览
添加回答
举报