簡體   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