数据库中的条目数 PHP

Number of entries in DB PHP

我正在创建一个函数来显示现在有多少用户在线。这是基于谁在过去 5 分钟内打开了页面。每个页面加载都保存到我的数据库中,如下:

目前我有以下代码

$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)

使用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); 

您可以使用分组依据,例如

SELECT user_id, timestamp FROM user_actions WHERE timestamp > date_sub(now(), interval 5 minute) group by user_id;

因为 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

相应地更改 table 代码。

这是一个示例代码。相应地修改它。