MySQL PHP在一定时间内随机排序?

MySQL PHP在一定时间内随机排序?,php,mysql,random,time,Php,Mysql,Random,Time,例如,假设您希望每10分钟得到一个随机结果。有没有办法通过兰德的订单来实现这一点 我也在使用连接,担心这是否会影响答案。谢谢大家! 您可以通过以下方式进行操作: SELECT *, rand(time_to_sec(current_time()) / 600) as ord FROM food JOIN food_images ON food.size = food_images.size order by ord 兰德函数的参数是种子。其中的表达式仅每10分钟更改一次。我面前

例如,假设您希望每10分钟得到一个随机结果。有没有办法通过兰德的订单来实现这一点

我也在使用连接,担心这是否会影响答案。谢谢大家!

您可以通过以下方式进行操作:

SELECT *, rand(time_to_sec(current_time()) / 600) as ord
  FROM food 
  JOIN food_images ON food.size = food_images.size 
  order by ord

兰德函数的参数是种子。其中的表达式仅每10分钟更改一次。

我面前没有MySQL服务器,因此这大部分是猜测,但您可以尝试以下操作:

通过以秒为单位计算系统时间,除以十分钟内的秒数,然后转换为整数,可以生成每十分钟仅更改一次的数字:

$seed = (int) (time() / 600);
然后将此值作为参数传递给MySQL的RAND函数,以对RNG进行种子设定,您应该会得到一个可重复的序列,该序列每十分钟更改一次:

$stmt = mysqli_prepare($conn, 'SELECT ... ORDER BY RAND(?)');
mysqli_stmt_bind_param($stmt, 'i', $seed);
您可以使用MySQL,如文档中所述:

您正在创建一个命名的数据库对象,其中包含一个或多个SQL语句,这些语句将以一个或多个固定的间隔执行,并在特定的日期和时间开始和结束


我猜你使用的是php,所以你也可以使用php Cron作业,

你的意思是,你希望在接下来的10分钟内每次查询都得到相同的随机结果,然后在接下来的10分钟内得到不同的随机结果,依此类推?@AlexHowansky,这是正确的。如果可能的话。如果我没记错的话,ORDER BY RAND并不总是像您预期的那样工作,因为MySQL可能有些版本优化了RAND引用到单个调用,而不是每个结果行调用。您可以改为执行类似SELECT*、RAND AS seq。。。。按顺序订购,以确保不同的rand结果。但是,如果总的结果很大,重复这些类型的查询可能会很昂贵;您可能需要考虑在启动时选择一个标识值列表,让执行查询的代码随机选择标识符,以实现更具针对性的查询。如果您不希望每次都得到相同的结果,您可以创建一个附加表,将数据放在每个rand上,并使用它从所有rand中选择与表中相同的结果。@StupidKid我希望在10分钟内得到相同的结果,然后在这10分钟结束后,做出一个新的结果。谢谢,但是时间到了哪里?10分钟后会有不同的结果吗?我只是想知道…很抱歉我误读了你的问题。除非有办法添加种子,否则我不知道该怎么做。没关系,我很感激你的回答+1事实上,我想是的。啊,该死,我忘了MySQL有这个功能可以轻松获得大纪元时间!很好。您可能希望对该查询进行基准测试,如果您有大型表,则可能成本高昂,并且您可能希望切换到其他变体之一。种子的效果仍然应该以同样的方式应用。如果我这样做,比如说一千行或更多行,会发生什么?会不会更慢,或者可能会发生什么?我不这么认为。与获取行或遍历索引相比,生成随机数的工作量可以忽略不计。按兰德排序通常会破坏数据库通常使用的索引功能。如果它是一个小表上的简单查询,那么它就无关紧要了。“你必须通过测试才能找到答案。@AlexHowansky欢迎您;我得打我以防万一;-我可能被天知道的东西猛扑走了,哈哈!他不希望每10分钟运行一次查询,他希望在需要时随时运行查询,但让结果在10分钟内保持不变。
$stmt = mysqli_prepare($conn, 'SELECT ... ORDER BY RAND(?)');
mysqli_stmt_bind_param($stmt, 'i', $seed);