如何设计才能保证论坛楼层不重复?

2013 年 1 月 25 日
 jacky007wang
现在有个需求,论坛贴子的回复都会显示xx楼,比如:

20楼 Jacky
楼主好人,1024
[回复此楼]

如果用户John点了[回复此楼],那么这个回复需要显示成:

21楼 John
@Jacky 回复20楼
1024
[回复此楼]

和v2ex相同的是都有@username, 不同的就是加了 回复xx楼

像v2ex这样,楼层数是不需要记录的,显示的时候计算一下就好,但按我说的这种需求,需要把楼层记在数据库
Table Reply:
reply_id
user_id
content
floor : 本条回复的楼层
reply_to_user_id : 对应@User
reply_to_floor : 对应回复xx楼

现在的问题就是有什么简便的方式记录楼层,能保证并发情况下多个用户同时回复,楼层floor这个字段能正确设置而不会出现楼层重复?
PS:用的Django
6378 次点击
所在节点    程序员
23 条回复
qiayue
2013 年 1 月 25 日
我能想到的是,楼层数依然通过计算得出,但是计算时要建立reply_id与楼层数之间的关系。
而你数据库表的reply_to_floor字段改为reply_to_reply_id,即存储被回复的楼层的id。
显示的时候显示reply_to_reply_id对应的楼层数。
tioover
2013 年 1 月 25 日
如果是回复某条信息的
数据库里就记录对应的那条信息的ID,然后显示的时候再重新计算
jacky007wang
2013 年 1 月 25 日
@qiayue
@tioover
多谢回复,你们说的实现方式应该是一样的,这有个问题:
考虑分页的情况,假设一页100楼
Jacky的回复是90楼,John回复了Jacky90楼的这条回复,但是John的回复最终在110楼,那么重新计算的时候就非常麻烦
OATOS
2013 年 1 月 25 日
@jacky007wang 这个不太懂,楼主是建设论坛的吗?很想问一下:目前用哪种开源软件建论坛比较好啊?
Paranoid
2013 年 1 月 25 日
其实可以这样,数据表保存 at 的那条记录的id, 然后页面输出之后先有顺序楼层. 然后用 javascript 根据保存的 at 的那条记录的id 去取得相应的楼层替换之.
binux
2013 年 1 月 25 日
1、用count(1)设置floor
2、别去记什么reply_to_floor,回复xx楼就是一个文案,既然显示的时候能计算出来,就让提交回复的时候加到内容里面就可以了
jacky007wang
2013 年 1 月 25 日
@OATOS
看来你没建过论坛,那就Discux或PHPWind里挑一个吧
jacky007wang
2013 年 1 月 25 日
@Paranoid
还是我在3楼说的问题,如果是在同一页面js可以替换,如果分页了,就不行
jacky007wang
2013 年 1 月 25 日
@binux
count(1)? 没明白
"让提交回复的时候加到内容里面" --这样是够简单,但就太不灵活了,将来可能会更改显示方式,就做不到了。
Paranoid
2013 年 1 月 25 日
@jacky007wang 分页, 找不到给楼层,直接给链接.
OATOS
2013 年 1 月 25 日
@jacky007wang 是的,所以来学习学习,谢谢楼主啦!
jacky007wang
2013 年 1 月 25 日
@Paranoid 那就不一致了,不太好
Paranoid
2013 年 1 月 25 日
@jacky007wang 如果看不到楼层里面的信息量,楼层存在的意义是什么. 链接你可以自动ajax.
rqrq
2013 年 1 月 25 日
ls+1,lz要的东西又费马达又费电。
换个思路,不需要显示楼层,但是有个提示文字点击了之后ajax显示引用内容。
tunetoystory
2013 年 1 月 25 日
我觉得有点想树的感觉,我觉得可以加个level如果这个回复是直接回复楼主的,level就是0,如果是回复回复的,level就是1,这样你只需要对level进行limit,但是我感觉取数据的sql可能稍微麻烦些
jacky007wang
2013 年 1 月 25 日
@rqrq
嗯,确实,看来没有好的办法显示楼层。
jacky007wang
2013 年 1 月 25 日
@Rabbit52 多谢,不过你说的不是我要问的问题:)
run2
2013 年 1 月 25 日
既然是回复,交流双方知道(有@通知)就行了,其他人看不看的爽很重要么?
jacky007wang
2013 年 1 月 25 日
@sobigfish 可能不同的论坛需要的交流方式不一样,如果像本帖,看这些回复来回的AT我就看得头晕,所以想到加上楼层,可能会清晰一些。但现在看不好实现,只好计划采用下面的方式

21楼 John
@Jacky "楼主好人,1024"
----------------------------------
1024
[回复此楼]
mercurylanded
2013 年 1 月 25 日
不使用恢复xx楼,改少量的内容引用怎样。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/58728

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX