首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ci_sessions查找在线朋友

从ci_sessions查找在线朋友
EN

Stack Overflow用户
提问于 2013-03-07 16:22:43
回答 2查看 2K关注 0票数 0

我正在用codeigniter实现一个聊天系统,所以现在我想要显示在线朋友。现在我想知道如何找到在线朋友的数量/名称,我有一个ci_sessions表,其中我正在存储会话,codeigniter自动存储它,你知道它。我有一个名为friends的表格,里面有我的朋友列表。表格的结构是这样的

代码语言:javascript
复制
 id      user_id      friend_id
  1           1             2
  2           1             3
  3           1             4

就像这样。所以我想在朋友表的基础上了解ci_session的在线用户。所以我在view或html中使用了它。

代码语言:javascript
复制
    <?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呢?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-09 00:19:50

我已经通过在ci_sessions表中添加usir_id列,然后通过这个查询连接它,但是首先你应该创建你的会话库,在会话中的builit in session中的一些代码将被修改,这些代码可以在系统/库中找到。首先,你可以查看这篇文章来改变它,你会知道如何做这个Find Online Friends using ci_sessions

然后使用下面的代码来获取数据。我在我的视图中使用了它。你可以随心所欲地使用。

代码语言:javascript
复制
    $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();

然后用它来显示好友的名字,你可以随意更改。

代码语言:javascript
复制
                <?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']];

               }

        }} ?>
票数 1
EN

Stack Overflow用户

发布于 2013-03-07 16:35:01

就像这样

代码语言:javascript
复制
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对象时都会运行:

代码语言:javascript
复制
UPDATE users SET last_activity=NOW() WHERE entity_ID=?

然后使用下面的查询:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15266284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档