【问题标题】:Random like order with mysql and PHP [closed]使用mysql和PHP的随机顺序[关闭]
【发布时间】:2017-02-11 03:41:09
【问题描述】:

我使用 PHP 和 Mysql。我有一张看起来像这样的表:

id   title
----------
1    my title
2    another title
3    The last title

现在我想随机选择它们。

  • 由于查询大小,我需要使用 LIMIT。
  • 类随机顺序每次都应始终是相同的随机顺序。

示例结果,每次

3   The last title
1   my title
2   another title

再运行一次查询:

3   The last title
1   my title
2   another title

出现相同的随机结果。

可能的解决方案

  • 添加一个实随机数,存储为插入生成的新列。
  • 一些神奇的 SELECT 查询。
  • 还有别的吗?

为什么我想要这个是我插入产品,首先从一个站点,然后从另一个站点。结果,我想将它们混合在一起。

【问题讨论】:

  • 困惑。所以你想要 123、312、231、321 等?
  • "类似随机的顺序每次都应该是相同的随机顺序" 这不是真正的随机,是吗?
  • @PraveenKumar 不。如果我第一次按 312 顺序获取它们,那么我将始终按该顺序获取它们。它应该是随机的,但它应该是一个静态的混合顺序。
  • 你的意思是这样的? select * from <tablename> where <cond> ORDER BY ONLY_RAND_THE_FIRST_TIME_AND_REMEMBER_WHAT_YOU_DID_FOR_EVERMORE() limit <startlimit>, <end limit>
  • 那么答案是如果你能写出其中之一,请告诉我们,我们都会帮助你测试它

标签: php mysql random


【解决方案1】:

使用ORDER BY RAND()。所以你的查询应该是:

 select * from <tablename> where <cond> then ORDER BY RAND() limit <startlimit>, <end limit>

【讨论】:

  • 这每次都会产生不同的结果。我每次都想要相同的结果。 “随机喜欢”。
  • 为什么要投反对票???您的要求是什么?根据您的问题,您想显示随机数据。我错了吗?
  • @DipanwitaKundu 删除了我的反对票。看,他清楚地解释了你,你没有阅读他对你答案的评论吗?
  • @DipanwitaKundu 是的,因为您显然没有阅读他们对您的回答的评论。
【解决方案2】:

这根本不是真正的随机数,但是您的请求又一次不适用于随机数。您希望在 order by 中使用每条记录的某种散列。您可能会找到更好的东西,但作为一个简单的例子,您可以使用:

SELECT * FROM my_table ORDER BY MOD(id, 2);

你可以在这里看到工作:
http://sqlfiddle.com/#!9/269a4/1/0

【讨论】:

  • 太棒了!这似乎是我正在寻找的神奇 SQL 查询。我唯一担心的是它是否能很好地处理 1000 个结果。我需要试试看。
  • 好吧,MOD(id, 2) 不太适合获得随机结果,但如果你找到一些更复杂的方法来获得“类随机”分布,那么你可以把它放在那里。就在我的脑海中,我认为哈希会很有用,但您不希望出现会严重损害您的性能的东西,也许您可​​以查看TO_BASE64() 并看看它是如何工作的。
  • 我刚刚在更多行上尝试了MOD,它似乎运行良好。您认为它存在哪些缺陷?
  • 对于 MOD(id, 2) 来说,它基本上只是说“把偶数 ids 放在首位”,所以在一个小样本中你可能不会注意到它,但一旦它变得更大(例如 2,4, 6,8,10,1,3,5,7,9) 你可能想要一些东西来搞乱订单
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2015-11-23
相关资源
最近更新 更多