【问题标题】:How to select a set of random rows from a table based on a key?如何根据键从表中选择一组随机行?
【发布时间】:2012-07-16 01:19:58
【问题描述】:

我知道 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 行。所以它每次都会根据一个键选择一组随机行。

这可能吗?

【问题讨论】:

  • 这是矛盾的;您想要随机选择,而且每次都选择相同的选择?
  • 是的,所以我希望它根据一个键选择一组随机的行。
  • 那你得澄清一下;我不明白你的意思。

标签: php mysql sql random rows


【解决方案1】:

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

【讨论】:

  • 您能否更具体地说明您需要多长时间?
  • 主要是它运行良好,谢谢。我从来不知道你可以为RAND() 函数添加参数!
【解决方案2】:

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

【讨论】:

  • 我将如何准确地使用该随机数?
  • 不,我的意思是如何在 SQL 查询中实现它。
【解决方案3】:

一个想法..

将行id保存在SESSION/cookie中,

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

   $sql = select RAND...

} else {

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

}

【讨论】:

  • 什么,您的代码似乎不起作用...if isset($var) { ... } else { // $var does not exist, and you're using it }
  • 对不起.. 愚蠢的错误不应该被设置为 $var。如果您将其保存在 SESSION 中,则应为 $_SESSION[$var]。
猜你喜欢
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
  • 2014-02-01
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多