数据库中的条目数 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 代码。
这是一个示例代码。相应地修改它。
我正在创建一个函数来显示现在有多少用户在线。这是基于谁在过去 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 代码。
这是一个示例代码。相应地修改它。