[英]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.