需求:t_user表包含有(uid,nick_name,score,win,lose)等字段,现在想做一个“战绩榜单”,根据(lose/win)的比值排序,只取前20名(可能会有并排的名次),个人目前对mysql语句熟一点,但我们老大就是要我用HQL实现,搞得我头都大了,希望对HQL比较熟悉的高手们可以指教一下,万分感谢。HQL榜单

解决方案 »

  1.   

    HQL查的是你的实体类。。就比如你的实体类名叫  t_userhql就写 from t_user where order by lose,winQuery query=session.createQuery("from t_user where order by lose,win");query.setFirstResult(0); //设置首行记录query.setMaxResults(20);//设置查询到的最大记录树数query.setFetchSize() //设置要查询的记录数mysql不支持top,如果你熟悉sql语句。。String sql = "这里写SQL的查询语句";
    Query q = mysession.createSQLQuery(sql).addEntity(t_user.class);hibernate这么弄也可以的一样会给你转换成对象希望对你有帮助噢。。
      

  2.   

    from t_user(实体类) as t order by t.lose/t.win limit 0,20
    hql和sql感觉差不多啊
    怎么感觉我写的和sql一样呢
      

  3.   

    没这么简单的 是根据lose/win进行排序(/是指除,不是或者)  我知道根据order by 可以进行排序,但由于可能有并排名次的情况,所以不能简单取前20条记录 另外 HQL是不支持limit的 
      

  4.   


    你用
    String sql = "这里写SQL的查询语句";
        Query q = mysession.createSQLQuery(sql).addEntity(t_user.class);这么就支持了直接写SQL
      

  5.   

    那天中午急着回学校参加毕业典礼 老大却要我当天下午弄好 我就快hold不住了 还好最后还是放我回去了 呵呵  说他自己做 不过不知他做出来了没有 到时找他的语句看看 
      

  6.   

    sql和hql调用执行的函数也不一样sql调用的时候中间多一个sql,hql则相反之。