Php 从ci_会话中查找在线朋友
我正在codeigniter中实现一个聊天系统,所以现在我想显示在线朋友。现在我想知道如何找到在线朋友的数量/姓名,我有一个ci_sessions表,其中存储会话,codeigniter自动存储您知道的会话。我有一个叫朋友的表格,里面有我的朋友列表,表格的结构是这样的Php 从ci_会话中查找在线朋友,php,codeigniter,session,Php,Codeigniter,Session,我正在codeigniter中实现一个聊天系统,所以现在我想显示在线朋友。现在我想知道如何找到在线朋友的数量/姓名,我有一个ci_sessions表,其中存储会话,codeigniter自动存储您知道的会话。我有一个叫朋友的表格,里面有我的朋友列表,表格的结构是这样的 id user_id friend_id 1 1 2 2 1 3 3 1
id user_id friend_id
1 1 2
2 1 3
3 1 4
像这样。所以我想在朋友表的基础上从ci_会话中了解在线用户。所以我在视图或html中使用了它
<?php
$this->db->where("user_data <>","");
$query = $this->db->get('ci_sessions');
$result=$query->result();
foreach ($result as $row)
{
$user_data=$row->user_data;
foreach (unserialize($user_data) as $k => $v)
{
// here is something will be done if i m not wrong
}
}
?>
假设我的所有朋友都在线,那么我如何才能找到他们的计数/姓名/id。谢谢。差不多吧
应该有用
然后使用$db->num\u行;为了伯爵
更新
每次创建用户对象时都会运行此操作:
UPDATE users SET last_activity=NOW() WHERE entity_ID=?
然后,查询将使用以下命令:
SELECT
entities.UUID,
users.entity_ID, users.first_name, users.last_name, userinfo.image_ID
FROM users
LEFT JOIN entities ON entities.ID=users.entity_ID
LEFT JOIN friends ON users.entity_ID=friends.user_ID_1 OR
users.entity_ID=friends.user_ID_2
LEFT JOIN userinfo ON users.entity_ID=userinfo.user_ID
WHERE
(friends.user_ID_1=? OR friends.user_ID_2=?) AND friends.approved=1 AND
users.entity_ID!=? AND (TIMESTAMPDIFF(MINUTE, users.last_activity, CURRENT_TIMESTAMP) < 15)
ORDER BY first_name DESC
我在ci_sessions表中添加了usir_id列,然后通过此查询将其连接起来,但首先您应该创建会话库,并且可以在system/library上找到的内置会话中将更改少量代码 首先,你看这篇文章来改变这一点,你就会知道如何做到这一点 然后使用此代码获取数据。我用我的观点来看。你可以随心所欲地使用它
$data = array();
$this->db->select('*');
$this->db->from('ci_sessions');
$this->db->join('users', 'users.user_id=ci_sessions.user_id');
$this->db->join('friends', 'friends.user_id=ci_sessions.user_id or friends.sender_id=ci_sessions.user_id');
$this->db->where('ci_sessions.user_id !=', $this->session->userdata('user_id'));
$this->db->where('friends.sender_id', $this->session->userdata('user_id'));
$this->db->or_where('friends.user_id', $this->session->userdata('user_id'));
$this->db->where('users.user_id !=' , $this->session->userdata('user_id'));
$this->db->where('friends.status', 1);
$this->db->where('user_data !=', '');
$query = $this->db->get();
$num_rows = $query->num_rows();
然后用它来显示朋友的名字,你可以随意改变
<?php
if ($num_rows <= 0){?>
foreach ($query->result() as $row)
{
$udata = unserialize($row->user_data);
/* put data in array using username as key */
$data[$udata['name']] = $udata['name'];
$time=$row->last_activity;
$timeOut = time() - 150;
if ($time >= $timeOut)
{ //display name} else
echo $data[$udata['name']];
}
}} ?>
存储ci_会话的表中是否有用户id列?没有,它存储在用户_数据中。如果我们取消序列化,那么我们可以获取它。ci_会话中没有用户_id列。然后取消序列化并在查询中使用它,或者修改代码,或者以其他方式执行。我将在回答中发布“我的方式”。我花了很多时间在点解。谢谢@Aysha Ali。。。
<?php
if ($num_rows <= 0){?>
foreach ($query->result() as $row)
{
$udata = unserialize($row->user_data);
/* put data in array using username as key */
$data[$udata['name']] = $udata['name'];
$time=$row->last_activity;
$timeOut = time() - 150;
if ($time >= $timeOut)
{ //display name} else
echo $data[$udata['name']];
}
}} ?>