【问题标题】:Order By Rand by Time (HQL)按时间排序 (HQL)
【发布时间】:2011-02-24 07:30:06
【问题描述】:

我正在使用 asp.net Mvc 2 和 NHibernate 开发一个 Web 应用程序,并且我在我的页面中分页数据(一个类别中的产品),但是这些数据是随机的,所以我使用的是 HQL 语句链接这个:

string hql = "from Product p where p.Category.Id=:IdCategory order by rand()";

它工作正常,但是当我分页时,有时相同的产品会出现在第一、第二等页面中,因为它是由 rand() 排序的。

有没有办法通过固定的时间段(内部时间)进行随机排序?或者有什么解决办法?

【问题讨论】:

    标签: nhibernate random pagination hql


    【解决方案1】:

    我不明白你为什么要故意随机化数据。如果您不希望它们按特定顺序排列,为什么不按主键排序?

    【讨论】:

    • 嗨乔恩,这是一个广告产品页面,我想将记录随机分配给用户......因为如果我不这样做,相同的产品总是在第一个页面上!
    • 在这种情况下,您需要基于对每个用户保持不变的东西提供一些稳定的排序。你那里有任何类型的饼干吗?
    • 好吧,我没有任何 cookie 或会话。但我可以把它弄好,然后上 Session!
    【解决方案2】:

    种子随机数生成器:

    order by rand(123)
    

    我建议使用会话范围的随机数作为种子。这样,页面不会突然为单个用户重新排序,但仍会为每个用户进行不同的排序。

    【讨论】:

    • 我可以使用 SessionId 吗?或者使用 Random 对象获取一个数字并放在 Session 上并使用它!好吧..我会试试这个!谢谢
    • 您可以使用会话 ID,但需要先将其转换为数字(如果尚未转换):Integer.parseInt(sessionId, radix)
    • 谢谢,我想我会按时间(1 或 5 分钟)缓存一个数字并使用它……太好了!干杯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 2010-11-01
    • 2014-09-30
    相关资源
    最近更新 更多