我需要创建一个朋友系统,但我的循环总是跳过第一个匹配,有时它会打印同名的副本
$result = mysql_query("SELECT * FROM tbusers INNER JOIN tbfriends ON tbusers.id = tbfriends.username_id");
while($row = mysql_fetch_array($result))
{
if ($row['username_id'] == 1)//the 1 will be a variable, username_id is in friends
$count = $row['friendname'];//friendname is in friends
if ($row['id'] == $count)//id is in users
echo $row['username'];//username is in users
}
有人能看出我的问题是什么吗?
答案 0 :(得分:2)
2件事:
if ($row['username_id'] == 1)
你应该把它放在你的sql中:
$result = mysql_query("SELECT username, friendname FROM tbusers INNER JOIN tbfriends ON tbusers.id = tbfriends.username_id where tbusers.id = ".$yourVariable);
在您的查询中,用户和朋友是相互关联的,只能是平等的。
现在,这个:
$count = $row['friendname'];//friendname is in friends
if ($row['id'] == $count)//id is in users
等于
if ( $row['id'] == $row['friendname'] )
这听起来很不对劲。您将数字ID与名称进行比较。此外,您的SQL查询已经从用户中检索所有朋友。在我在此处显示的版本中,它仅检索您感兴趣的用户的朋友。
最后,您打印(回显)用户的名称,而不是朋友的名称。在我看来,以下代码将执行您想要的操作:
$result = mysql_query("SELECT friendname FROM tbfriends WHERE username_id = ".$yourUserVariable);
while($row = mysql_fetch_array($result))
{
echo $row['friendname']; // or better: echo $row['friendname'], '<br>';
}
编辑:评论后......
所以if ( $row['id'] == $row['friendname'] )
表示用户是他自己的朋友。会发生什么事吗?
此代码将打印您想要的内容,朋友姓名。
/*
$result = mysql_query("
SELECT username as friend_name,
friendname as friend_id,
username_id as user_id
FROM tbusers INNER JOIN tbfriends ON tbusers.id = tbfriends.username_id
WHERE tbusers.id = ".$yourVariable);
* /
$result = mysql_query("
SELECT username as friend_name,
friendname as friend_id,
username_id as user_id
FROM tbusers INNER JOIN tbfriends ON tbusers.id = tbfriends.friendname
WHERE tbfriends.username_id = ".$yourVariable);
while($row = mysql_fetch_array($result))
{
echo $row['friend_name']; // or better: echo $row['friend_name'], '<br>';
}