我正在用codeigniter实现一个聊天系统,所以现在我想要显示在线朋友。现在我想知道如何找到在线朋友的数量/名称,我有一个ci_sessions表,其中我正在存储会话,codeigniter自动存储它,你知道它。我有一个名为friends的表格,里面有我的朋友列表。表格的结构是这样的
id user_id friend_id
1 1 2
2 1 3
3 1 4就像这样。所以我想在朋友表的基础上了解ci_session的在线用户。所以我在view或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
}
}
?> 假设我所有的朋友都在线,那么我如何才能找到他们的count/ name/ id呢?谢谢。
发布于 2013-03-09 00:19:50
我已经通过在ci_sessions表中添加usir_id列,然后通过这个查询连接它,但是首先你应该创建你的会话库,在会话中的builit in session中的一些代码将被修改,这些代码可以在系统/库中找到。首先,你可以查看这篇文章来改变它,你会知道如何做这个Find Online Friends using ci_sessions。
然后使用下面的代码来获取数据。我在我的视图中使用了它。你可以随心所欲地使用。
$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']];
}
}} ?>发布于 2013-03-07 16:35:01
就像这样
SELECT
user.name
FROM users
WHERE user_ID IN(SELECT friend_ID FROM friends WHERE user_ID='$current_user') AND
user_ID IN(SELECT user_ID FROM ci_sessions)`应该行得通。
然后使用$db->num_rows;进行计数。
更新
每次创建user对象时都会运行:
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 DESChttps://stackoverflow.com/questions/15266284
复制相似问题