0

关于问题的理解:

  1. 当任何用户登录网站时,都会有一页显示来自 mysql 数据库表的记录。我想要的是在用户第一次显示该页面时随机显示记录。然后记录必须具有与用户第一次登录帐户时相同的显示顺序。

  2. 记录序列保持不变,直到注销。

  3. 但是当用户再次登录时,顺序会再次随机更改。

4

4 回答 4

2

当用户第一次登录时创建带有结果的缓存,然后只从缓存中读取,而不是从数据库中读取。

对于缓存,您可以使用函数serialize并将数据保存到文件(每个用户的唯一名称)。然后只需unserialize形成文件。

例子:

Lanchlogin()模拟用户登录站点,然后将其替换notLogin()为模拟用户已经登录站点。请注意,当用户登录时,用户点数会发生变化,但当他已经在现场时不会发生变化。

//when user is login
function login(){
    //1. here you log in user;
    $userID = '345353';
    //2. And you get some data drom DB
    $randomRowsFromDb = getRandomDataFromDB();
    //3. Save it to cache
    saveToCache($userID, $randomRowsFromDb);
    //4. Display it (optional)
    display($randomRowsFromDb);
}

//when user is already on site
function notLogin(){
    $userID = '345353';
    $data = loadFromCache($userID);//load from cache
    display($data);//display cached data instead of taking it from DB
}
//function geting random data form DB
function getRandomDataFromDB(){
    return 
    array(
    array('id'=>'43534','login' => 'John', 'points' => rand(0,100)),
    array('id'=>'27725','login' => 'Anna', 'points' => rand(0,100)),
    array('id'=>'23664','login' => 'Jerremy', 'points' => rand(0,100)),
    array('id'=>'87855','login' => 'Kate', 'points' => rand(0,100)));
} 

function display($dataToDisplay){
    var_dump($dataToDisplay);
}

function saveToCache($userID, $data){
    file_put_contents($userID.'.cache', serialize($data));
}

function loadFromCache($userID){
    if (file_exists($userID.'.cache')){
        $file = file_get_contents($userID.'.cache');
        return unserialize($file);
    }else{
        //in case cache is missing
        $data = getRandomDataFromDB();
        saveToCache($userID, $data);
        return $data;
    }
}
于 2013-10-21T09:58:36.630 回答
1

我得到了一个很好的解决方案:

>> After login use rand function.
>> When you fetch the records, stores them in SESSION var for future use.
>> Next time when page loads, use session vars to show data.

或者

您可以在用户登录时将数据存储在 Session 中,并在注销时将其删除。

喜欢:

<?php

session_start();

mysql_connect('localhost', 'root', '');
mysql_select_db('test');

$query = "SELECT children, name FROM tree ORDER BY RAND()";
$result = mysql_query($query);


while ($row = mysql_fetch_assoc($result)) {
    $_SESSION['tree'][] = $row['children'];
}

header("Location: blank.php");
?>
  • 谢谢
于 2013-12-20T09:49:20.647 回答
0

将记录放入数组并使用 shuffle 命令 http://php.net/manual/en/function.shuffle.php

于 2013-10-21T09:39:38.337 回答
0

SQL 中的 RAND() 函数从表中返回随机记录。

Select * from table_name order by RAND() Limit 10 

如果您想以与第一次显示相同的顺序保留记录,并将其显示在多个页面中,请将数组保存在 Session 变量中获取

于 2013-10-21T09:57:05.467 回答