关于问题的理解:
当任何用户登录网站时,都会有一页显示来自 mysql 数据库表的记录。我想要的是在用户第一次显示该页面时随机显示记录。然后记录必须具有与用户第一次登录帐户时相同的显示顺序。
记录序列保持不变,直到注销。
但是当用户再次登录时,顺序会再次随机更改。
当用户第一次登录时创建带有结果的缓存,然后只从缓存中读取,而不是从数据库中读取。
对于缓存,您可以使用函数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;
}
}
我得到了一个很好的解决方案:
>> 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");
?>
将记录放入数组并使用 shuffle 命令 http://php.net/manual/en/function.shuffle.php
SQL 中的 RAND() 函数从表中返回随机记录。
Select * from table_name order by RAND() Limit 10
如果您想以与第一次显示相同的顺序保留记录,并将其显示在多个页面中,请将数组保存在 Session 变量中获取