繁体   English   中英

如何基于键从表中选择一组随机行?

[英]How to select a set of random rows from a table based on a key?

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

例如,说这是我的桌子:

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

也许如果键是6,则每次都会选择第4行和第5行。 但是,如果键是3,则它将选择行2和5。因此,每次它将基于键选择一组随机行。

这可能吗?

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

对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));

一个主意..

将行ID保存在SESSION / Cookie中,

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

   $sql = select RAND...

} else {

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

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM