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

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

21楼 John
@Jacky "楼主好人,1024"
----------------------------------
1024
[回复此楼]
mercurylanded
2013-01-25 21:32:03 +08:00
不使用恢复xx楼,改少量的内容引用怎样。。。

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

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

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

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

© 2021 V2EX