DB PHP中的条目数

时间:2016-09-15 11:38:35

标签: php mysql count

我正在创建一个功能来显示现在有多少用户在线。这取决于谁在最近5分钟内打开了一个页面。每个页面加载都保存到我的DB中,如下所示:

Database Table

目前我有以下代码

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

3 个答案:

答案 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

相应地更改表格代码。

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