5 回答

TA貢獻1842條經驗 獲得超13個贊
在沒有想到更好的辦法前,還是直接寫入數據庫吧~使用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 關注
- 654 瀏覽
添加回答
舉報