日期:2014-05-18  浏览次数:20629 次

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

------解决方案--------------------
HQL查的是你的实体类。。

就比如你的实体类名叫  t_user

hql就写 from t_user where order by lose,win

Query 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这么弄也可以的。。。一样会给你转换成对象。。。

希望对你有帮助噢。。

------解决方案--------------------
from t_user(实体类) as t order by t.lose/t.win limit 0,20
hql和sql感觉差不多啊
怎么感觉我写的和sql一样呢
------解决方案--------------------
还是楼上的对,,,,,忘记了----
------解决方案--------------------
引用:
没这么简单的 是根据lose/win进行排序(/是指除,不是或者)  我知道根据order by 可以进行排序,但由于可能有并排名次的情况,所以不能简单取前20条记录 另外 HQL是不支持limit的 


你用
String sql = "这里写SQL的查询语句";
    Query q = mysession.createSQLQuery(sql).addEntity(t_user.class);


这么就支持了。。。直接写SQL。。。
------解决方案--------------------
sql和hql调用执行的函数也不一样sql调用的时候中间多一个sql,hql则相反之。