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

Php 如何基于键从表中选择一组随机行?,php,mysql,sql,random,rows,Php,Mysql,Sql,Random,Rows,我知道SQL中的RAND()函数可以从表中选择随机行,但问题是我不希望每次刷新浏览器时都选择不同的随机行。我想要相同的随机行集,它是基于键选择的 例如,假设这是我的桌子: ---------------------- | id | word | literal| ---------------------- | 1 | say | YAS | ---------------------- | 2 | eat | TAE | ---------------------- |

我知道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行。因此,它将根据一个键每次选择一组随机行


这可能吗?

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

例如:

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

md5散列的想法很好,但有一种更简单的方法。根据需要生成随机数,并使用超全局存储该数字

例如:

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保存在会话/cookie中

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

   $sql = select RAND...

} else {

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

}
一个主意

将行id保存在会话/cookie中

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

   $sql = select RAND...

} else {

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

}


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

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

这是矛盾的;你想要一个随机选择,但每次都是相同的选择?是的,所以我希望它根据一个键选择一组随机的行;我不明白你的意思。这是矛盾的;你想要一个随机选择,但每次都是相同的选择?是的,所以我希望它根据一个键选择一组随机的行;我不明白你的意思。我该如何准确地使用那个随机数?不,我是说如何在SQL查询中实现它。我该如何准确地使用那个随机数?不,我是说如何在SQL查询中实现它。什么,你的代码似乎不起作用<代码>如果isset($var){…}否则{/$var不存在,并且您正在使用它}对不起。。愚蠢的错误不应该为$var设置。如果您在会话中保存了它,则应该为$\u会话[$var]。什么,您的代码似乎不起作用<代码>如果isset($var){…}否则{/$var不存在,并且您正在使用它}对不起。。愚蠢的错误不应该为$var设置。如果您在会话中保存了它,那么应该为$\u会话[$var]。您可以更具体地说明您需要相同序列的时间吗?主要的是,它工作得很好,谢谢。我从来不知道您可以为
RAND()
函数添加参数!你能更具体地说一下你需要多长时间来完成相同的序列吗?主要的是它工作得很好,谢谢。我从来不知道您可以为
RAND()
函数添加参数!