[讨论]JSP论坛中帖子的顺序
一个论坛嘛,大家都知道的,新开的主题肯定是位于置顶帖下面,也就是非置顶帖的第一条,回帖后那个主题也会变成第一条。如果是在排序的时候,应该以什么作为基础来对帖子进行排序呢?我自己想了一个解决方案,但觉得不是最好,特发帖来讨论
我的解决方案如下:
在数据库中新增一个字段,比如叫state,当发帖后,取得当前数据库中state值中最大的值,然后+1存给新的帖子,如果有回帖,则取得回帖的主题的state值,再取得当前最大的state值,比较后如果2个值相等则不改变,否则把最大的state值+1后更新给新回帖的主题,这样只要按照state进行排序就能对主题进行排序了。
例子:
有主题1,2,3。对应的state值也为1,2,3。如果新开一个主题4,则取得当前最大的state值3,对其+1后存给主题4。这时有一个对1帖子进行回帖的操作,于是取得当前最大值与该主题的state值相比,当前值比主题的大,+1后更新给帖子1,这时帖子1,2,3,4对应的state值为5,2,3,4。对state进行排序后,顺序为1,4,3,2。
不知道各位有没有其他更好的办法来实现?
搜索更多相关主题的帖子:
置顶帖 JSP 数据库 state
----------------解决方案--------------------------------------------------------
用时间楼主觉得怎么样?
时间最晚的那个放在第一位
----------------解决方案--------------------------------------------------------
我当然也考虑过用时间啦,但这样一来就有2个步骤需要做
第一,取得主题的所有时间并排序(因为要考虑主题还没有回帖的情况),取得回帖中最晚发表的帖子的时间
第二,将2个时间进行比对,最后得出顺序
综合下来,我还是放弃了这个方案……
----------------解决方案--------------------------------------------------------
去问问静老大怎么实现的 呵呵
----------------解决方案--------------------------------------------------------
我想……静老大的这个论坛也不会是自己写的吧。。。太浩大了点……
----------------解决方案--------------------------------------------------------
应该知道原理吧
----------------解决方案--------------------------------------------------------
我当然也考虑过用时间啦,但这样一来就有2个步骤需要做
第一,取得主题的所有时间并排序(因为要考虑主题还没有回帖的情况),取得回帖中最晚发表的帖子的时间
第二,将2个时间进行比对,最后得出顺序
综合下来,我还是放弃了这个方案……
-------------------------------------------------------------------------------------
用 更新时间 是个比较好的方案
但是我不明白你的两个步骤是怎么得出来的
用SQL语句也只用一句而已,如果你在描述数据库是怎么实现的,也未免太.....
主题中要求有个字段是用来指向最后的回复的,如果是新主题,那么发表时间和更新时间相同,而且指向最后回复的字段为空
如果是旧主题,则发表时间比更新时间要早,而且更新时间等于最后回复的时间
很多论坛采用的是很奇怪的处理方法,个人觉得都不大好,比如说二叉树等
----------------解决方案--------------------------------------------------------
简单描述一下:
T_THEME
----------
ID char(32) not null unique, 主题编号
PT timestamp not null, 发表时间戳-PostTimestamp
UT timestamp not null, 更新时间戳-UpdateTimestamp
然后主题按照UT进行排序,当然,如果有什么置顶呀,救生圈之类的,这样是不能实现的
----------------解决方案--------------------------------------------------------
发现UT就等于我的那个state……只是我用的是数字表示,而UT是用时间表示
----------------解决方案--------------------------------------------------------
你的state是冗余字段,想想,你怎么表示这个帖子什么时候被更新的呢?
----------------解决方案--------------------------------------------------------