體會和認識問題:如何在首次登錄時隨機獲取記錄?
當任何用戶登錄到網站上,有一個頁面顯示的記錄 從MySQL數據庫表來。我想要的是當用戶第一次顯示該頁面時隨機顯示記錄 。然後在登錄後, 記錄必須具有與用戶第一次顯示 相同的顯示順序。
記錄序列在註銷之前保持不變。
但是,當用戶再次登錄 時,序列會再次隨機更改。
體會和認識問題:如何在首次登錄時隨機獲取記錄?
當任何用戶登錄到網站上,有一個頁面顯示的記錄 從MySQL數據庫表來。我想要的是當用戶第一次顯示該頁面時隨機顯示記錄 。然後在登錄後, 記錄必須具有與用戶第一次顯示 相同的顯示順序。
記錄序列在註銷之前保持不變。
但是,當用戶再次登錄 時,序列會再次隨機更改。
我得到一個很好的解決方案:
>> 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.
OR
您可以將數據存儲在會話時用戶LO-杜松子酒& &當註銷其刪除。
像:
<?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");
?>
獲取記錄到數組 和使用隨機播放命令 http://php.net/manual/en/function.shuffle.php
RAND()函數在SQL從表中返回隨機記錄。
Select * from table_name order by RAND() Limit 10
如果你想堅持記錄以相同的順序,它第一次顯示,並顯示在多頁,保存在會話獲取變量
不建議使用RAND()進行訂購,請參閱http://stackoverflow.com/questions/14330798/mysql-order-by-rand-performance-issue-and-solution –
感謝您的信息... –
創建結果緩存陣列時,用戶第一次登錄和然後只從緩存讀取,而不是從數據庫讀取。
對於緩存,您可以使用功能serialize
並將數據保存到文件(每個用戶的唯一名稱)。然後,只需unserialize
表單文件。
實施例:
Lanch login()
來模擬用戶登錄到網站,然後用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;
}
}
你可以給我發送代碼spinet? –
謝謝你給你的代碼........! –
還有,你試過這麼遠嗎? – dbf
第一次隨機顯示記錄。現在該怎麼做才能保持序列? –
我已經添加了示例。 – Volvox