Mysql朋友在线显示

时间:2013-04-18 21:07:22

标签: php mysql arrays

好的,所以我从搜索无处不在如何解决这个问题......我试图向在线用户展示,但不是所有用户,只有谁在你的朋友列表中..

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

例如,我登录我的网站,并在users_online表中创建行。我想只在网上看到我的朋友,这些朋友都存储在friend_array栏目中(1,5,16,5(那是朋友的身份证号码))..我如何从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;

3 个答案:

答案 0 :(得分: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.")";
?>

答案 1 :(得分: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有3个朋友在阵列(2,5,16),用户有id 2有(1,3)..所以在每个浏览器输出都是1..Uray!我希望这个问题对某人有帮助。但是我在msql表上使用更新功能,如果用户注销,我只删除users_online表中的行:)

答案 2 :(得分:0)

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

USER表:

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小提琴链接:http://sqlfiddle.com/#!2/34f83/1/0