【问题标题】:Regenerate "random" MySQL query重新生成“随机”MySQL 查询
【发布时间】:2013-11-15 08:13:28
【问题描述】:

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

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

任何建议都很棒。

【问题讨论】:

  • 上一个、下一个操作后是否需要恢复“随机”图像?你需要为每个用户随机吗?有可能有重复吗?您需要真正的随机订单还是只是不寻常的订单?
  • 您还可以在 SQL 查询的结果数组上使用 shuffle()php.net/manual/en/function.shuffle.php
  • @sectus,以下是问题的答案:1)我只是想按照画廊中显示的相同顺序浏览它们 2)不,可能是相同的,但我想要更改他们点击“再次随机播放”的所有内容的顺序 3)没有重复 4)不寻常的顺序是完美的
  • @DarkAshelin,Shuffle 是完美的,但是如何在其他页面中重新创建相同的顺序?
  • @FarshadMomtaz 将最终结果数组保存在全局变量中。

标签: php mysql sql random


【解决方案1】:

最简单的方法是,在数据库中放入另一列,正确索引,然后给它一个随机整数。然后你可以在上面ORDER你的桌子,让它稳定。这将使所有用户具有相同但随机的顺序。

编辑:如果您希望每个用户都有自己的序列,这也很简单,正如 Alma Do 所说:

SELECT * FROM records ORDER BY RAND(17)

将始终具有相同的顺序(只要您不更改数据库),并且不同于

SELECT * FROM records ORDER BY RAND(2308)

但不会很快。

我能想到的唯一替代方案会占用大量空间:当您为用户计算序列时,将其存储在表中。这需要每个用户有一个包含数百万行的两列表。

【讨论】:

  • 这可行,但每个用户都有相同的顺序,并且每次用户点击“随机播放”时都不能更改顺序
  • 这不是你问题的一部分,我们也不是心灵感应者。已编辑。
【解决方案2】:

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

如果指定了常量整数参数 N,则将其用作种子 value,它产生一个可重复的列值序列。

这意味着,您将能够有随机顺序,但在您的 prev-next 页面中仍然是相同的顺序。

【讨论】:

  • Rand() 完美运行,但是当你有 100 万条记录要通过时,它真的很慢!
猜你喜欢
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 2012-08-09
  • 1970-01-01
  • 2016-06-20
  • 2014-01-02
相关资源
最近更新 更多