好的......我又迷路了。如何为rand()创建自定义种子,以便在特定时间段内保留数据库中的选择:10分钟,1小时,1天等。
我用这个:
$query = 'SELECT * FROM table order by rand () LIMIT 1';
每次刷新页面时都要随机选择。我已经阅读了几天,但我找不到一个例子来解释如何制作一个自定义种子,以保持选择一段特定的时间。请帮帮我...... 叹息
答案 0 :(得分:1)
您可以创建临时表:
SELECT * INTO #temp FROM table ORDER BY rand() LIMIT 1
然后查询临时表以显示您的数据。超时后删除/重新创建表。
答案 1 :(得分:1)
如果您正在使用PHP,您可以创建一个算法,该算法生成一个随机数(使用rand()),然后将此数字保存在数据库或文件中的某个位置。然后检查当前日期和随机数的生成日期。计算差值并使用if语句确定是否需要再次生成随机数。这是一些伪代码(请注意,按日期我的意思是时间戳或Unix时间):
$gendate = getGenerationDateFromDB();
$now = getCurrentDate()
if(getDifference($gendate, $now) > [time interval]) then
$randnum = generateRandNumber();
saveRandNumberInDB($randnum);
saveGenDate();
else
$randnum = getRandNumberFromDB();
答案 2 :(得分:1)
我对这个概念有所了解,而不是正式的解决方案:
在倒圆md5()
上使用UNIX_TIMESTAMP()/60
。表格中有许多记录,让它为X.计算md5()
中的数字,将其设为Y.计算Y % X
,将其设为Z.使用limit 1 offset Z
在SQL的末尾。
答案 3 :(得分:1)
正如多米尼克罗杰所说 - 兰德的命令太可怕了。 但是我觉得使用cron太大了枪。 (尤其是你不知道怎么做)
你应该在php中生成一个随机整数并存储它并将其传递给mysql:
SELECT * FROM table WHERE id=(MOD('.$php_generated_random.', LAST_INSERT_ID())+1)
它得到一个大的随机数,并且模数,所以它不会超过表长度。
但LAST_INSERT_ID()
存在问题。在很多情况下,你的mysql可能会返回0。
所以好'安全的方式这样做:
并且只选择id = $ sth
的位置答案 4 :(得分:0)
选择后,您需要将该数据存储到会话中,并且会话可以设置为您指定的时间。无需每次都查询数据库。其次,查询与在特定时间内设置广告/时间无关。
答案 5 :(得分:0)
ORDER BY RAND()
是一个非常糟糕的主意 - 它会破坏数据库性能。
这是你应该在cron作业上运行的那种事情,就像你希望“随机选择”持续一样,并存储随机选择分钟/小时/天的行的ID。您需要注意确保该行不会被删除。
答案 6 :(得分:0)
“创建自定义种子”
我相信这个问题要你做这样的事情:
$query = 'SELECT * FROM table order by rand (' . get_seed() . ') LIMIT 1';
<?php
// return the current hour. so the seed is the same each hour
function get_seed() {
return date('H');
}
?>
'种子'的目的是为测试目的创建相同的随机序列。
RAND(N)
如果指定了常量整数参数N,则将其用作种子值,从而生成可重复的列值序列。