5 回答

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊
在沒有想到更好的辦法前,還是直接寫入數(shù)據(jù)庫吧~使用Parentid沒有索引就會(huì)查的很慢了,建立索引的話也是硬盤開銷。犧牲硬盤的成本比犧牲速度的成本要便宜。
另外,如果用Parentid,那么引用的帖子如果修改或者刪除了怎么辦?引用者說的話就無法知道其原意了。
—————
想了想,如果不用第一種方法。想到一個(gè)效率更高些的方法:
每個(gè)非引用貼的ID為整數(shù)x10000(假設(shè)最多9999個(gè)回復(fù)的情況下),如12345 0000
引用帖的ID為原帖ID+1 即 12345 0001 ,12345 0002 等等
這樣,假如要得到ID為2220010的帖的所有引用時(shí),只需要where id>=2220000 and id<= 2220010 就可以了。應(yīng)該比遞歸快很多(ID為聚集索引)
?
(這樣取出的順序就和原來不一樣了,不過可以 order by postTime,還可以加一些邏輯,保證對(duì)多個(gè)post引用一個(gè)post的時(shí)候只按最大的ID取一次)
?
(另外,假如有這么一種情況,一個(gè)論壇有很多分區(qū),每個(gè)分區(qū)又可以有子分區(qū),子分區(qū)還可以“無限”有子分區(qū)。 在這種情況下,也盡量不要用parentId即遞歸,而是考慮使用位域(flags))

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
我想評(píng)論內(nèi)容按照大小分為存儲(chǔ)在數(shù)據(jù)庫中和存儲(chǔ)在文件中,大評(píng)論數(shù)據(jù)庫中只存標(biāo)志,標(biāo)志指向內(nèi)容所在的文件,在顯示時(shí)異步加載數(shù)據(jù)庫和文件中的評(píng)論。
遞歸這東西應(yīng)該用到,不然怎么遍歷評(píng)論的評(píng)論呢?
?
with as 就是個(gè)結(jié)果集別名,
with test as?(select * from test)
select * from test where a=1;
你那個(gè)應(yīng)該寫成
employeeID 所在表為employee,ManagerID所在表為Manager
select * from?employee as e,ManagerID as m where e.employeeID=1 and ManagerID<>null

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個(gè)贊
- 5 回答
- 0 關(guān)注
- 659 瀏覽
添加回答
舉報(bào)