我想列出一个列表,以显示在线的用户朋友。
users
id | firstname | lastname | last_access
users_friends
uID | bID | type | accepted
这就是我的表格的样子。
首先,我在$ USER中拥有用户ID。
$ USER的id存储在users_friends中的行“uID”行中。 bID是朋友的身份。
我还需要检查是否接受,如果是1,否则用户正在“等待”并且已经被朋友接受了。
类型也应该检查“朋友”,因为我也有其他类型。
检查它们是否在线:last_access包含unix时间戳。
自上次访问以来500秒,我在社区中称之为“在线”。
现在这就是你需要知道的全部内容。我自己尝试构建查询并提出了这个问题:
$query = mysql_query("
SELECT *
FROM users u, users_friends uf
WHERE
u.last_access > UNIX_TIMESTAMP()-500
AND
uf.uID = '$USER'
AND
uf.type = 'friend'
AND
uf.accepted = '1'
");
现在我想回应在线朋友的名字和姓氏(来自用户)。
我试了一会儿()
while($get = mysql_fetch_array($query)){
echo $get["bID"]."<br>";
echo $get["firstname"]."<br>";
}
我显示了自己的用户名($ USER)。但回声bID对我的朋友来说是正确的id,虽然它显示了所有(不过滤掉那些在线的人)。
我怎么能做到这一点,我错过了什么?
答案 0 :(得分:1)
我认为您缺少指定users和users_friends表之间的关系
$query = mysql_query("
SELECT *
FROM users u
INNER JOIN users_friends uf on u.id=uf.bid
WHERE
u.last_access > UNIX_TIMESTAMP()-500
AND
uf.uID = '$USER'
AND
uf.type = 'friend'
AND
uf.accepted = '1'
");
答案 1 :(得分:0)
做
$query = mysql_query("
SELECT u.* FROM
users AS u
INNER JOIN
users_friends AS f
ON u.id = f.uID
WHERE
u.last_access > UNIX_TIMESTAMP()-500
AND
f.bID = '$USER'
AND
f.type = 'friend'
AND
f.accepted = '1'
");
这应该会给你的朋友行。请注意使用该$ USER变量的SQL注入。
注意:这将为您提供一个与您成为朋友的人员列表(您在他们的朋友列表中)。如果“友谊”不是双向的,并且您只想查看朋友列表中的朋友,则可以使用f.bID交换f.uID,反之亦然。
答案 2 :(得分:0)
SELECT DISTINCT *
FROM users_friends uf
LEFT JOIN users u ON uf.bID = u.ID
WHERE uf.uID = $USER
AND u.last_access > UNIX_TIMESTAMP()-500
AND uf.type = 'friend'
AND uf.accepted = '1'