论坛编程的问题.现有两张表bbs_topic (帖子主体表)  bbs_reply (对应主题的回复表)其中bbs_topic里的数据分为两类..置顶贴和一般贴.通过一个字段t_istop来区别————————————————————————————————现在我想实现的就是一般论坛的帖子更新后排序重置的问题.即.一个帖子,有人回复后,它对应的bbs_topic的纪录就变到排序的第一列..主要是通过bbs_reply里的主键r_id来判断(由于是自动编号,所以一个topic对应的最大id就应该是最新回复..)还有就是我最最想不通的,如何把置顶贴和一般贴区别开来排序,即,置顶贴回复只会影响到同为置顶贴的帖子顺序,一般贴的最新回复,也只会影响到一般贴的顺序..
-----------------------------------------------------------------
不知道大家听明白了没..语言表达能力不佳..付上表结构bbs_topic:
t_id                       t_istop
(主键,自动编号)           (是否为置顶贴)
bbs_reply
r_id                       r_topicid,
(主键,自动编号)           (对应的bbs_topic表的id)
在线等..谢谢各位高手

解决方案 »

  1.   

    建议用最后更新时间,和是否置顶来排序order by t_istop desc,LastUpdateTime desc
      

  2.   

    因为用最大的回复id这样效率不高.在回复的时候,同时更新一样topic表的最后更新时间就可.
    排序的时候先按是否置顶排,然后按最后回复时间排.
      

  3.   

    慕白兄,能给个select语句的范例吗..
      

  4.   

    select * from 主题表  order by t_istop desc,LastUpdateTime desc
      

  5.   

    ...但是我主题表没有lastUpdateTime..这个字段..唯一一个时间类型的字段是t_tim,用来纪录发贴时间.. 而且我发现它基本没用- -|||我理解的是..如果通过时间来比对..就是要查bbs_reply,也就是回复表每个主题的最新更新时间..但是这select语句...我不大懂怎么写... sql学的不好- -
      

  6.   

    取得3条置顶贴:
    select top 3 * from bbs_topic where t_istop = 1取得20最近更新的一般贴:
    select top 20 y.*
    from 
    (
    select top 1000 r_topicId, max(rId) as r_id --可根据网站的访问量调整这里的设置进行优化 from bbs_reply a 
    group by r_topicId 
    ) x
    left join bbs_topic y on x.t_id = y.r_topicId
    where y.t_istop = 0
    order by x.r_id
      

  7.   

    那么就是在对bbs_reply插入数据时,同时把主题表的lastUpdateTime更新掉..?
      

  8.   

    ...smile9961大哥的回复完全看不懂..您有时间的话,可以详细解释一下吗.. 不然我不知道怎么用
      

  9.   

    上面有些字段名写错了,修改了一下:--取得20最近更新的一般贴:
    select top 20 y.*
    from 
    (
    select r_topicid, max(r_id) as r_id
    from bbs_reply a 
    group by r_topicId 
    ) x
    left join bbs_topic y on x.r_topicid = y.t_id 
    where y.t_istop = 0
    order by x.r_id
      

  10.   

    那么就是在对bbs_reply插入数据时,同时把主题表的lastUpdateTime更新掉..?
    ==>
    是的.
      

  11.   

    ...结果..运行成功了..但我也不知道是否是我想要的..因为我在页面里 加载bbs_topic的纪录时..是整个表一起加载的即select * from bbs_topic where t_classid=4 (t_classid是这些主题属于哪个分类,比如属于贴图区还是灌水区..)然后返回的纪录包括了置顶贴和一般贴...但是smile9961大哥你的思路是分开的吧...分开做的话一来我的界面要动了...二来还有一个很麻烦的问题..就是每页显示数据的不同..
      

  12.   

    慕白大哥你能帮我解释下..双层排序..到底是怎样的运行过程吗..order by t_istop desc,LastUpdateTime desc置顶贴与一般贴是如何区别开来排序的?麻烦您了,我sql确实很差..:P
      

  13.   

    order by t_istop desc,LastUpdateTime desc=====
    先按是否置顶还排序前面的置顶的,后面是非...在置顶或非置顶的帖子中,即t_istop 相同的情况下再按LastUpdateTime 的逆排序结果就会如下.t_istop   LastUpdateTime 
     
    1         2点
    1         1点
    1         0 点0           2..
    0           1
    0           0
      

  14.   

    嗯 谢谢慕白大哥..smile9961大哥的代码我也拿回去研究下..嘎嘎..