2010-10-31 27 views
0

我用這個代碼與最新的時間來更新用戶數據庫,當用戶處於聯機:選擇在線用戶數據庫與MySQL命令

$postTime = $user_array['last_online']; 

if ($postTime == ""){ 
    $minutes = 11; 
} else {   
    $now = time(); 
    $seconds = $now - $postTime; // $seconds now contains seconds since post time 
    $minutes = ceil($seconds/60); // minutes since post time 
    //$hours = ceil($minutes/60); //hours 
} 

if ($minutes > 10) { 
    $con = db_connect2(); 

    $sql = "UPDATE tbl 
      SET last_online='".strtotime("now")."' 
      WHERE userid='" .mysql_real_escape_string($_SESSION['userid']). "'"; 
    mysql_select_db('db',$con); 
    $result = mysql_query($sql,$con);     
} 

我不知道如果多數民衆贊成的最佳方式做到這一點,但我認爲它有效。現在我想要使用mysql命令獲取在過去10分鐘內處於活動狀態的所有用戶。這可能嗎。像

$time = time() - 600; 
$online = $conn->query("select username 
          from tbl 
         where last_online < $time"); 
+0

你的代碼有什麼問題? – 2010-11-06 07:10:45

+0

它在10分鐘前獲得了在線用戶,這不是我們想要的結果(我們希望用戶在線時間不到10分鐘)。看到我的答案。 – defines 2010-11-10 01:25:47

+0

對於'$ online'查詢,Dustin Fineout在下面指出了'<' ->'> ='。也就是說,不是'... last_online <$ time ...'使用'... last_online> = $ time ...'。 – 2010-11-11 08:06:04

回答

2

原始帖子中的代碼實際上會加載超過十分鐘前在線的用戶,而不是在(小於)十分鐘之內。因此,我們不想檢查last_online是否少於10分鐘前,而是要檢查它是否大於10分鐘前。

$time = time() - 600; 
$online = $conn->query("SELECT username FROM tbl WHERE last_online >= $time"); 
1

使用SELECT username from tbl where last_online >= DATE_SUB(NOW(), INTERVAL 10 MINUTE)

+0

看起來不錯,但不能完全得到它的工作 – ganjan 2010-11-01 01:53:16

+0

好的......出了什麼問題? – 2010-11-01 02:02:01

+0

我用strtotime(「now」)更新last_online,但查詢返回一個空的結果集(即零行)。 – ganjan 2010-11-01 13:33:59

0

東西試試這個(假設你存儲last_online數據作爲UNIX時間戳):

select username from tbl where last_online < (UNIX_TIMESTAMP(now())-600) 
+0

這還會加載超過10分鐘前在線的用戶,而不是在過去十分鐘內。 – defines 2010-11-10 01:36:47

2

當你的表填充了越來越多用戶的這種查詢將變得非常緩慢。我建議創建一個像onlinerecent_users這樣的新表,並且每當用戶刷新頁面時,INSERT/UPDATE表中的一行。定期刪除online表中時間戳超過10分鐘的行。

時間不是你可能有索引的好列,但是年,月,日是。祝你好運!

+0

爲什麼要添加所有這些開銷?時間戳(整數)作爲索引有什麼問題?這是數字比較 - 排序並不容易。 – defines 2010-11-10 01:36:09

+0

有什麼不對?他們幾乎都是獨一無二的。將索引視爲拇指的電話簿頁面剪切。如果你對沒有分組的東西進行索引 - 它不是非常有用,因爲搜索索引需要搜索實際數據(除非它是一個字面唯一索引或主鍵) – Mikhail 2010-11-11 17:36:10

0

我在這裏有一種情況,我認爲可以提供幫助。

其實我用表acessPermission,在這張表上我有Id, Ip, Page, Date這兩列。

我列Date是一種DateTime當我需要知道在我對訪問我的報告,我只是從數據庫中檢索列Date和我爆開的時候,我比較喜歡這樣的:

從數據庫

$exp=explode(" ", $date); 
$exp[0]; // here I have the date 
$exp[1]; // here I have the time 

今天

日期

減日期

$subt = ($exp[1] - $today); 

結果是唯一的,你需要在一個時間戳轉換結果,並再次進行比較,我認爲,或者你需要檢查的日期時間的減​​法,在這一小時後,在分鐘後..

現在比較時

if ($subt<600) { 
block intructions 
} else { 
block intructions 
} 

我希望這可以幫助一點。

好運