JForum 搜索时按时间排序的问题解决

小编辑 发布于 2010/02/25 15:49
阅读 445
收藏 0

JForum 搜索时可根据发表时间进行正序和倒序排序。但是,不管怎么排,出来的结果都是按照时间顺序排列。经过跟踪 JForum 的代码发现,JForum 是先从Lucene索引库搜索对应帖子的编号,这个编号的列表顺序是正确的,但是 JForum 根据这个帖子编号的列表到数据库中去查找对应的发帖详细信息,用的是 IN 的查询,于是出来的结果便成了按 id 进行正序的结果集了。

暂时的解决办法如下:

net.jforum.dao.generic 包中的 GenericLuceneDAO 类的 getPostsData(int[] postIds) 方法改成如下的代码:
public List getPostsData(int[] postIds)
{
	if (postIds.length == 0) {
		return new ArrayList();
	}
		
	List l = new ArrayList();
		
	PreparedStatement p = null;
	ResultSet rs = null;
		
	String sql = "SELECT p.post_id, p.forum_id, p.topic_id, p.user_id, u.username, u.nickname, p.enable_bbcode, p.enable_smilies, p.post_time, pt.post_subject, pt.post_text, t.topic_title FROM jforum_posts p, jforum_posts_text pt, jforum_users u, jforum_topics t WHERE p.post_id =? AND p.post_id = pt.post_id AND p.topic_id = t.topic_id AND p.user_id = u.user_Id";

	try {
		p = JForumExecutionContext.getConnection().prepareStatement(sql);
		for(int postId : postIds){
			p.setInt(1, postId);
			rs = p.executeQuery();				
			while (rs.next()) {
				Post post = this.makePost(rs);
				post.setPostUsername(rs.getString("username"));
				post.setPostNickname(rs.getString("nickname"));					
				l.add(post);
			}
			rs.close();
		}
	}
	catch (SQLException e) {
		throw new DatabaseException(e);
	}
	finally {
		DbUtils.close(rs, p);
	}
	return l;
}
	
搞定。
其中第21、22行是我们项目独有的。
加载中
返回顶部
顶部