如何保存使用rand()随机排序后的记录顺序?
保存SQL随机排序结果的几种方法
新增排序字段存储随机值
给原表加一个专门存随机排序权重的字段,把随机值持久化进去,之后就靠这个字段固定排序:-- 新增字段 ALTER TABLE TableA ADD COLUMN random_order FLOAT; -- 生成并保存随机值 UPDATE TableA SET random_order = RAND(); -- 固定排序查询 SELECT * FROM TableA ORDER BY random_order;要是需要换新的随机顺序,重新跑一遍UPDATE语句更新
random_order就行。创建新表存储排序结果
不想动原表的话,直接把第一次随机排序后的结果存到新表里,后续查新表就有固定顺序:-- 创建新表并插入排序后的数据 CREATE TABLE TableA_Random AS SELECT * FROM TableA ORDER BY RAND(); -- 查询固定随机结果 SELECT * FROM TableA_Random;要是需要更新随机顺序,重新执行CREATE TABLE语句覆盖新表即可;如果要保留原表的主键、索引等结构,可以先复制表结构再插入数据:
CREATE TABLE TableA_Random LIKE TableA; INSERT INTO TableA_Random SELECT * FROM TableA ORDER BY RAND();应用层缓存结果
不用改数据库的话,第一次查询到随机排序结果后,把数据缓存到应用内存、Redis这类缓存工具里,后续用户访问页面直接读缓存,不用再执行SQL。需要刷新随机顺序时,重新查询并更新缓存就行。
内容的提问来源于stack exchange,提问作者infimux
相关产品推荐
相关产品推荐

