我正在创建一个功能来显示现在有多少用户在线。这取决于谁在最近5分钟内打开了一个页面。每个页面加载都保存到我的DB中,如下所示:
目前我有以下代码
$query = mysql_query("SELECT user_id, timestamp FROM user_actions WHERE timestamp > date_sub(now(), interval 5 minute)");
$onlineUsers = mysql_num_rows($query);
这只是总行数,我该怎么做才能只计算一次user_id? (所以在上面的数据库片段中应该是2而不是5)
答案 0 :(得分:1)
使用DISTINCT
关键字
$query = mysql_query("SELECT DISTINCT(user_id), timestamp FROM user_actions WHERE timestamp > date_sub(now(), interval 5 minute)");
$onlineUsers = mysql_num_rows($query);
答案 1 :(得分:0)
您可以使用group by,例如
SELECT user_id, timestamp FROM user_actions WHERE timestamp > date_sub(now(), interval 5 minute) group by user_id;
答案 2 :(得分:0)
由于mysql_*
已弃用(php 5以后)并已删除(php 7)。所以mysqli_*
示例在这里: -
<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
$conn = mysqli_connect('localhost','username','password','db name');//change credentials here
$online_users = array();
if($conn){
$query = mysqli_query($conn,"SELECT DISTINCT(user_id), timestamp,page FROM user_actions WHERE timestamp > date_sub(now(), interval 5 minute)");
if($query){
while($row = mysqli_fetch_assoc($query)){
$online_users[] = $row;
}
}else{
echo "query error:-".mysqli_error($conn);
}
}else{
echo "db connection error:-".mysqli_connect_error();
}
?>
<table>
<tr>
<thead>
<th>User Id</th>
<th>timestamp></th>
<th>Page Visited</th>
</thead>
</tr>
<tbody>
<?php foreach($online_users as $online_user){?<
<tr>
<td><?php echo $online_user['user_id'];?></td>
<td><?php echo $online_user['timestamp'];?></td>
<td><?php echo $online_user['page'];?></td>
</tr>
<?php }?>
</tbody>
</table>
注意: - 如果您还要显示在线用户名,则必须执行JOIN query
。
相应地更改表格代码。
这是一个示例代码。相应地修改它。