2013-10-21 55 views
0

體會和認識問題:如何在首次登錄時隨機獲取記錄?

  1. 當任何用戶登錄到網站上,有一個頁面顯示的記錄 從MySQL數據庫表來。我想要的是當用戶第一次顯示該頁面時隨機顯示記錄 。然後在登錄後, 記錄必須具有與用戶第一次顯示 相同的顯示順序。

  2. 記錄序列在註銷之前保持不變。

  3. 但是,當用戶再次登錄 時,序列會再次隨機更改。

+0

還有,你試過這麼遠嗎? – dbf

+0

第一次隨機顯示記錄。現在該怎麼做才能保持序列? –

+1

我已經添加了示例。 – Volvox

回答

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. 

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"); 
?> 
  • 感謝
0

RAND()函數在SQL從表中返回隨機記錄。

Select * from table_name order by RAND() Limit 10 

如果你想堅持記錄以相同的順序,它第一次顯示,並顯示在多頁,保存在會話獲取變量

+1

不建議使用RAND()進行訂購,請參閱http://stackoverflow.com/questions/14330798/mysql-order-by-rand-performance-issue-and-solution –

+0

感謝您的信息... –

2

創建結果緩存陣列時,用戶第一次登錄和然後只從緩存讀取,而不是從數據庫讀取。

對於緩存,您可以使用功能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; 
    } 
} 
+0

你可以給我發送代碼spinet? –

+0

謝謝你給你的代碼........! –