我正在编写一个分页API,以通过设置随机种子值来提供随机结果。除非用户想要随机播放结果,否则结果将是相同的,但是如果用户想要随机播放,我将重新创建种子值,以便它将返回不同的记录集。
我的问题是,如果我从数据库中删除一条记录,即使种子相同,由于元素长度的变化,结果也会有所不同。有什么方法可以使它在记录删除后也能持久保存?
查询示例:
set seed to 0.1; select * from table order by random();
答案 0 :(得分:2)
我不会按random()
订购,因为无法正确控制。
如果您想要可靠但看似随机的顺序,则可以使用哈希函数:
SELECT * FROM atable ORDER BY hashint4(id);
这将在DELETE
时间内保持稳定,因为哈希值不会改变。
如果您需要不同的“随机”顺序,请以可重复的方式生成一个随机整数并使用
... ORDER BY hashint4(id + 42)