2012-07-16 68 views
0

我知道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行。因此,每次都会根据密钥选择一组随机行。

这可能吗?

+2

这是矛盾的;你想要一个随机选择,但每次都是一样的选择? – 2012-07-16 01:21:25

+0

是的,所以我希望它根据一个键选择一组随机的行。 – think123 2012-07-16 01:21:49

+1

然后你将不得不澄清;我不明白你的意思。 – 2012-07-16 01:22:28

回答

4

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

+0

请问'N'接受字符串值吗? – think123 2012-07-16 01:28:21

+0

你可以更具体地了解你需要多长时间? – Razvan 2012-07-16 01:28:26

+0

好吧,永远真的。 – think123 2012-07-16 01:31:09

1

与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)); 
+0

我将如何使用该随机数字? – think123 2012-07-16 01:26:25

+0

不,我的意思是如何在SQL查询中实现它。 – think123 2012-07-16 01:29:23

+0

新增数据库位。 – SomeKittens 2012-07-16 01:32:45

0

的想法..

保存行ID在会话/饼干,

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

    $sql = select RAND... 

} else { 

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

} 
+0

什么,你的代码似乎没有工作...'如果isset($ var){...}其他{//$ var不存在,并且您正在使用它}' – think123 2012-07-16 01:27:18

+0

抱歉..愚蠢的错误不应该为$ var设置。如果你将它保存在SESSION中,应该是$ _SESSION [$ var]。 – 2012-07-16 01:29:06