Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql好友在线显示_Php_Mysql_Arrays - Fatal编程技术网

Php Mysql好友在线显示

Php Mysql好友在线显示,php,mysql,arrays,Php,Mysql,Arrays,好的,我有来自各地搜索的headech如何解决这个问题..我试图显示在线用户,但不是所有用户,只有谁在你的朋友列表中 因此,我有一个名为users\u online的表,当用户登录我的网站时,该表会自动创建一行,其中包含日期、ip、名称、用户id和好友数组(保存所有用户的好友) 例如,我登录我的网站,在users\u online表中创建行。我只想在线查看我的朋友,这些朋友存储在friend_数组列中(1,5,16,5(即朋友id号))。。我如何从friends_array colum获取数据,

好的,我有来自各地搜索的headech如何解决这个问题..我试图显示在线用户,但不是所有用户,只有谁在你的朋友列表中

因此,我有一个名为users\u online的表,当用户登录我的网站时,该表会自动创建一行,其中包含日期、ip、名称、用户id和好友数组(保存所有用户的好友)

例如,我登录我的网站,在users\u online表中创建行。我只想在线查看我的朋友,这些朋友存储在friend_数组列中(1,5,16,5(即朋友id号))。。我如何从friends_array colum获取数据,并查看当前记录了哪些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;


> p>您应该考虑更改数据库模式。下面是一个例子:

用户表:

id | name | current_session_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链接:

整理好伙计们!谢谢你的帮助

//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;

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

),虽然在脱机时没有删除用户表中的条目,但在离开之后,您将无法得到预期的结果。请考虑将朋友列放到另一个表中,并将每个朋友存储在一个新行中,而不是在数组中。另外,不要在每次登录时插入新行,而是更新当前的时间戳值。您也可以使用
INSERT。。。。关于DUPLICATE KEY UPDATE online=NOW()
我也考虑过这个问题。要创建另一个表并仅使用id、用户id和好友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();
//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;