2013-11-15 99 views
0

我有一个拥有超过一百万条记录的数据库。我试图以随机顺序获取记录。数据库中充满了指向图像的链接,每个图像都有唯一的编号。所以我应该能够为图片上的下一个和上一个按钮重新创建相同的“随机”顺序?重新生成“随机”MySQL查询

有没有办法提出查询并将其保存在cookie或会话中,并重新使用它来重新生成我的随机顺序?
总体而言,它是有效的,因为我不希望加载时间过高?

任何建议是真棒。

+0

您是否需要在prev,next操作之后恢复“随机”图像?你需要随机为每个用户?有可能有重复?你需要真正的随机或只是不寻常的秩序? – sectus

+0

你也可以在你的SQL查询结果数组上使用'shuffle()'。 http://php.net/manual/en/function.shuffle.php –

+0

@sectus,这里是对这些问题的回答: 1)我只想按照画廊上展示的相同顺序穿过它们2)不,它可能是一样的,但我想改变他们点击“再次洗牌”的顺序3)没有重复4)不寻常的顺序是完美的 –

回答

4

最简单的方法是,将其放入数据库的另一列中,正确编制索引并给它一个随机整数。那么你可以在这个表上ORDER,并保持稳定。这将使所有用户具有相同的,但随机的顺序。

编辑:如果你希望每个用户都有自己的序列,这也是很简单的,因为阿尔玛待办事项说:

SELECT * FROM records ORDER BY RAND(17) 

将始终具有相同的排序(只要你不改变数据库)和

SELECT * FROM records ORDER BY RAND(2308) 

但它不会很快。

我能想到的唯一选择会使用很多空间:当您为用户计算序列时,将其存储在表中。这需要每个用户有两百万行的两列表。

+0

这将工作,但每个用户将具有相同的顺序,并且每次用户点击“随机播放”时都无法更改顺序 –

+1

这不是您问题的一部分,我们也不是传感器。编辑。 – Amadan

1

根据MySQL手册页面,您可以为RAND()函数指定参数,所以它会返回随机的,但重复的序列:

如果指定了一个常量整数参数n,则它被用作种子 值,这会产生可重复的列值序列。

这意味着,您可以随机订购,但您的prev-next页面仍然具有相同的顺序。

+0

Rand()完美地工作,但是当你有100万条记录要经过时,它真的很慢! –