一个开源的论坛,所有的帖子无论是新帖还是回复帖都保存在一个数据库中。其中数据库的字段结构如下:¦帖子ID ¦ 回复ID ¦标题 ¦内容 ¦ ........ | 最后回复时间 | ...其中“回复ID”字段作为判断该帖子是“主题帖子”还是“回复贴子”的依据:
当 “回复ID=0”的时候判断为主题帖子;
当“回复ID不=0(此时的数值为某一新帖的“帖子ID”值)”的时候判断为回复帖子。问题来了:
在网页的源代码中,查询主题贴子列表的语句为“select * frome XXX where 回复ID=0 order by 最后回复时间 DESC”,如此以来,主题帖子虽然可以按照发表的时间后前的顺序来排列,但是无法按照最后回复的时间后前的顺序来排列,也就是说,实现不了顶帖子的功能。想问的是:
如何在不增加字段的前提下,仅仅通过SQL语句实现顶帖子的效果??谢谢先!
当 “回复ID=0”的时候判断为主题帖子;
当“回复ID不=0(此时的数值为某一新帖的“帖子ID”值)”的时候判断为回复帖子。问题来了:
在网页的源代码中,查询主题贴子列表的语句为“select * frome XXX where 回复ID=0 order by 最后回复时间 DESC”,如此以来,主题帖子虽然可以按照发表的时间后前的顺序来排列,但是无法按照最后回复的时间后前的顺序来排列,也就是说,实现不了顶帖子的功能。想问的是:
如何在不增加字段的前提下,仅仅通过SQL语句实现顶帖子的效果??谢谢先!
解决方案 »
- 请教 :hibernate 3张表 如何建关联 及增删改查 谢了
- 再谈字符集
- 关于Sping Hibernate Struts2方面的异常处理!!急!!
- executeQuery中的异常无法现实到网页~~~~~~~~~~
- 很很多免费的IT书下载网址
- as3+j2ee做flash游戏问题!
- Unable to compile class for JSPNote: sun.tools.javac.Main has been deprecated
- iis+resin如何配置servlet呢?我把我的servlet放到classpath里就是访问不到呢。
- 怎么样判断输入的用户名不在表中,在asp中用do while not rs.eof,在jsp中用什么?
- JSP 页面怎么设计 动态加载center的内容
- jsp中界面登陆问题
- request
实现w加1
然后根据order by 来实现~
____________________________________________________________不增加字段,做不到!
frome XXX A,
(select 帖子ID, MAX(最后回复时间) as 最后回复时间 from XXX group by 帖子ID) B
where A.回复ID=0
and A.帖子ID = B.帖子ID
order by B.最后回复时间 DESC
你说的顶帖子是说的回复了就排前面了?还是说的置顶帖子啊?如果是说的回复了就排前面了,不加字段可以实现。
select * from XXX where 回复ID=0 order by 最后回复时间 DESC
这个语句就已经实现了啊
难道是最后回复时间在发新主题的时候是空?如果是这样的话,可以在发新主题的时候同时向发表时间和最后回复时间写入发表时间
或者
select * from XXX where 回复ID=0 order by 最后回复时间 DESC,帖子ID DESC如果LZ说的是置顶帖子
不加字段是不行的,如果没有置顶的标志字段,怎么知道那个帖子置顶了呢?加了置顶标志后(如字段名为top)select * from XXX where 回复ID=0 order by top DESC,最后回复时间 DESC
或者
select * from XXX where 回复ID=0 order by top DESC,最后回复时间 DESC,帖子ID DESC如有错误的地方,请大家指正