在PHP中更改RAND()函数的种子?

在PHP中更改RAND()函数的种子?,php,mysql,Php,Mysql,我通过PHP脚本访问了我的数据库表,有时会得到连续的重复结果 我运行了以下查询: 在进行此查询之前,我只尝试了orderbyrand(),但它给了我很多连续的重复结果,这就是为什么我决定使用orderbyrand(UNIX\u TIMESTAMP(NOW())。 但最后一个仍然给了我连续的重复结果(但更少) 我将写一个例子来解释我所说的“持续重复结果”的意思: 想象一下,我的表中有100行:第1行、第2行、第3行、第4行、第5行。。。 当我连续调用脚本PHP 5次时,我得到5个结果: -第2排,

我通过PHP脚本访问了我的数据库表,有时会得到连续的重复结果

我运行了以下查询:

在进行此查询之前,我只尝试了
orderbyrand()
,但它给了我很多连续的重复结果,这就是为什么我决定使用
orderbyrand(UNIX\u TIMESTAMP(NOW())
。 但最后一个仍然给了我连续的重复结果(但更少)

我将写一个例子来解释我所说的“持续重复结果”的意思:

想象一下,我的表中有100行:第1行、第2行、第3行、第4行、第5行。。。 当我连续调用脚本PHP 5次时,我得到5个结果: -第2排,第20排,第20排,第50排,第66排

我不希望同一行连续两次。 我想举个例子:-第2行,第20行,第50行,第66行,第20行

我只是想用一种简单的方法来解决它

RAND()并不是一个完美的随机生成器。这是一个快速的方法 按需生成随机数,可在 相同MySQL版本的平台

如果你想要5个结果,为什么不把限制改为5个呢?这将确保没有重复项

另一个选项是读取所有数据,然后在php中使用shuffle?

或者选择最大值并使用PHP生成的随机数

RAND()并不是一个完美的随机生成器。这是一个快速的方法 按需生成随机数,可在 相同MySQL版本的平台

如果你想要5个结果,为什么不把限制改为5个呢?这将确保没有重复项

另一个选项是读取所有数据,然后在php中使用shuffle?

或者选择最大值并使用PHP生成的随机数

仅通过重新定义查询是无法做到的。您需要更改PHP脚本的逻辑

如果希望PHP脚本(和查询)每次执行只返回一行,并且需要保证PHP脚本的重复执行产生不同的行,那么需要将以前的结果存储在某处,并在查询的
WHERE
条件中使用以前的结果

因此,您的PHP脚本类似于(伪代码):

$previousId=…;//加载上一次执行获取的行的ID
$query=“选择问题,回答1,回答2
从MyTable
身份证在哪里?
按兰德订购(UNIX_时间戳(NOW())
限制1”;
//使用$previousId绑定参数值执行$query
$newId=…;//获取获取的行的ID。
//为下一次执行保存$newId。
您可以使用各种存储来保存/加载所获取行的ID。为此,最简单的方法可能是在同一数据库中使用一个具有单行的特殊表


请注意,如果多次并行调用PHP脚本,仍然可能会得到重复的连续行。不确定这对你来说是否重要。 如果是这样,您也可以使用锁或数据库事务来修复此问题

仅通过重新定义查询是无法做到的。您需要更改PHP脚本的逻辑

如果希望PHP脚本(和查询)每次执行只返回一行,并且需要保证PHP脚本的重复执行产生不同的行,那么需要将以前的结果存储在某处,并在查询的
WHERE
条件中使用以前的结果

因此,您的PHP脚本类似于(伪代码):

$previousId=…;//加载上一次执行获取的行的ID
$query=“选择问题,回答1,回答2
从MyTable
身份证在哪里?
按兰德订购(UNIX_时间戳(NOW())
限制1”;
//使用$previousId绑定参数值执行$query
$newId=…;//获取获取的行的ID。
//为下一次执行保存$newId。
您可以使用各种存储来保存/加载所获取行的ID。为此,最简单的方法可能是在同一数据库中使用一个具有单行的特殊表


请注意,如果多次并行调用PHP脚本,仍然可能会得到重复的连续行。不确定这对你来说是否重要。 如果是这样,您也可以使用锁或数据库事务来修复此问题

$query ="SELECT Question,Answer1,Answer2 FROM MyTable ORDER BY RAND(UNIX_TIMESTAMP(NOW())) LIMIT 1";
$previousId = ...; // Load the ID of the row fetched by the previous execution

$query = "SELECT Question,Answer1,Answer2 
      FROM MyTable 
      WHERE id <> ?
      ORDER BY RAND(UNIX_TIMESTAMP(NOW())) 
      LIMIT 1";

// Execute $query, using the $previousId bound parameter value

$newId = ...; // get the ID of the fetched row.

// Save $newId for the next execution.