【问题标题】:SQLite: How to achive RANDOM ORDER and pageintation at the same time?SQLite:如何同时实现 RANDOM ORDER 和分页?
【发布时间】:2017-10-28 05:00:49
【问题描述】:

我有一个电影表,我希望能够查询数据库并获得一个随机的电影列表,但我不希望它返回 所有 可用的电影,所以我' m 使用LIMITOFFSET。问题是当我做这样的事情时:

SELECT *  FROM Movie ORDER BY RANDOM() LIMIT 50 OFFSET 0

然后当使用LIMIT 50 OFFSET 50 查询下一页时,RANDOM 种子会发生变化,因此第一页中的行可能会包含在第二页中,这不是所需的行为。

如何实现随机顺序并通过页面保存?据我所知,SQLite 的 RANDOM 函数不支持自定义种子。

谢谢!

【问题讨论】:

    标签: sql sqlite random


    【解决方案1】:

    您不能保留随机值。您必须在表中添加另一个字段名称以保持随机顺序

    UPDATE movie
    SET randomOrder = Random();
    

    然后你可以检索页面

    SELECT *  
    FROM Movie 
    ORDER BY randomOrder 
    LIMIT 50 OFFSET 0
    

    【讨论】:

    • 这不会对性能产生不可忽视的影响吗?如果我在数据库中有 10K 电影并且需要更新每一行的 randomOrder 字段以重新洗牌?
    • @Curtwagner1984 当然。但是你必须将随机顺序存储在somewhere,如果DB需要使用它,它必须在DB中。 (您可以使用单独的临时表。)
    猜你喜欢
    • 1970-01-01
    • 2012-03-21
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多