好的,所以我从搜索无处不在如何解决这个问题......我试图向在线用户展示,但不是所有用户,只有谁在你的朋友列表中..
所以我有一个名为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;
答案 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