4

好的,所以我到处搜索如何解决这个问题。我试图显示在线用户,但不是所有用户,只有你的朋友列表中的用户。

所以我有一个名为 users_online 的表,当用户登录我的网站时,该表中会自动创建 1 行,其中包含日期、ip、名称、user_id 和friend_array(保留所有用户的朋友)

例如,我登录我的网站并在 users_online 表中创建行。我只想在线查看我的朋友,这些朋友存储在friend_array列中(1,5,16,5(那是朋友的ID号))。我如何从friends_array列中获取数据并查看记录了其中的哪一个ID目前,这意味着哪些 id 存在于 user_online 表中并显示在我的个人资料中?

我希望不是令人困惑的问题...

好吧,这就是我的代码..所有存储在 online.php 文件中:

// Checking wheter the visitor is already marked as being online:
$inDB = mysql_query("SELECT user_id FROM users_online WHERE user_id=".$userid);

if(!mysql_num_rows($inDB))
{
    // Selects some data required to insert into users_online table from users table
    $DB = mysql_query("SELECT img,fname,friend_array FROM users WHERE user_id=".$userid);
    while($row=mysql_fetch_assoc($DB))
    {
    $img = $row['img'];
    $fname = $row['fname'];
    $farray = $row['friend_array'];
    }
    mysql_query("   INSERT INTO users_online (user_id,ip,img,fname,friend_array)
                    VALUES(".$userid.",'".$intIp."','".$img."','".$fname."','".$farray."')");
}
else
{
    // If the visitor is already online, just update the dt value of the row:
    mysql_query("UPDATE users_online SET dt=NOW() WHERE user_id=".$userid);
}


// Counting all the online visitors:
// Thats where i need to work out with friend array..
// I need to display all online friends only
list($totalOnline) = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM users_online"));


// Outputting the number as plain text:
echo $totalOnline;
4

3 回答 3

2

大伙儿整理!谢谢你的帮助!

//Selecting an array from db
$DB = mysql_query("SELECT friend_array FROM users_online WHERE user_id=".$userid);
    while($row=mysql_fetch_assoc($DB))
    {
    $friend_array = $row['friend_array'];
    $friends = array($friend_array); // Array of friends
    $friendIDs = implode(',', $friends);
    }
// Counting all the online friends:

list($totalOnline) = mysql_fetch_array(mysql_query("
        SELECT COUNT(*)
        FROM users_online
        WHERE user_id IN (".$friendIDs.")"));


// Outputting the number as plain text:
echo $totalOnline;

输出是 1 个在线用户,因为我使用 2 个浏览器登录,并且在 users_online 表中创建了 2 行,id 为 1 和 2..id 1 在数组 (2,5,16) 中有 3 个朋友,id 为 2 的用户有(1,3)..所以在每个浏览器中的输出都是 1..Uray!我希望这个问题对某人有所帮助..顺便说一句,我在 msql 表上使用更新功能,如果用户注销,我只是删除 users_online 表中的行:)

于 2013-04-18T23:17:47.117 回答
2
<?php
    $friends = array(1,5,16); // Array of friends
    $friendIDs = implode(',', $friends); // Turns array into string for SQL select statement

    // Gets only friends info from DB
    $sql = "
        SELECT date, ip, name, user_id
        FROM users_online
        WHERE user_id IN (".$friendIDs.")";
?>
于 2013-04-18T21:13:13.007 回答
0

您应该考虑更改数据库架构。这是一个例子:

用户表:

id | name | current_session_id

USER_FRIEND_USER 表(包含用户添加的朋友):

user_id | friend_user_id

会话表:

id | user_id | created_at | expires_at

SQL 查询以获取 ID 为“?”的用户的好友列表:

SELECT u.id, u.name FROM USER u
  INNER JOIN USER_FRIEND_USER ufu ON (ufu.friend_user_id = u.id)
  INNER JOIN SESSION s ON (s.id = u.current_session_id)
  WHERE ufu.user_id = ? AND s.expires_at >= NOW();

这是 SQL Fiddle 链接:http ://sqlfiddle.com/#!2/34f83/1/0

于 2013-04-18T21:54:27.667 回答