在一个表中获取一个数字,并在另一个表中打印该数字的引用名称

时间:2011-09-22 12:33:30

标签: php mysql

我需要创建一个朋友系统,但我的循环总是跳过第一个匹配,有时它会打印同名的副本

$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
}

有人能看出我的问题是什么吗?

1 个答案:

答案 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>'; 
}