如何根据键从表中选择一组随机行?

时间:2012-07-16 01:19:59

标签: php mysql sql random rows

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

例如,说这是我的表:

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

如果密钥为6,则可以选择第4行和第4行。每次都是5次。但也许如果密钥是3,它将选择第2行和第5行。因此,它每次都会根据密钥选择一组随机行。

这可能吗?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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));

答案 2 :(得分:0)

一个想法..

将行ID保存在SESSION / cookie中,

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

   $sql = select RAND...

} else {

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

}