0

我知道RAND()SQL 中从表中选择随机行的函数,但问题是我不希望它在每次刷新浏览器时选择不同的随机行。我想要相同的一组随机行,它是基于一个键选择的。

例如,假设这是我的表:

----------------------
| id | word | literal|
----------------------
|  1 | say  |   YAS  |
----------------------
|  2 | eat  |   TAE  |
----------------------
|  3 | hit  |   TIH  |
----------------------
|  4 | bad  |   DAB  |
----------------------
|  5 |delve | EVLED  |
----------------------

也许如果键是 6,它每次都会选择第 4 行和第 5 行。但也许如果键是 3,它会选择第 2 行和第 5 行。所以它每次都会根据一个键选择一组随机行。

这可能吗?

4

3 回答 3

4

您可以使用 MySQL 函数的 : Rand(N) 形式,并注意每次需要相同的生成随机数序列时传递相同的 N。N 可以在特定会话期间保持不变,也可以存储在 cookie 中以供更长时间使用。这取决于您需要多长时间保持序列不变。

于 2012-07-16T01:25:24.613 回答
1

使用 md5 哈希的想法很好,但是有一种更简单的方法可以做到这一点。根据需要生成随机数,并使用$_SESSION超全局来存储数字。

例子:

session_start();
if(!isset($_SESSION["randomNumber"])){
    $_SESSION["randomNumber"] = generateRandomQuery();
}

然后,您就可以在构建查询时使用该号码。使用 PDO,它会是这样的:

$number = $_SESSION["randomNumber"];
$query = $database->prepare("SELECT id FROM *databaseName* where id = :id");
$query->execute(array(":id" => $number));
于 2012-07-16T01:22:40.887 回答
0

一个想法..

将行 ID 保存在 SESSION/cookie 中,

$var = value from $_SESSION/cookie
if (isset($var)){

   $sql = select RAND...

} else {

   $sql = select ..... where row = $var

}
于 2012-07-16T01:25:07.087 回答