将朋友和用户表链接在一起(获取朋友的用户名?)

时间:2011-06-28 11:05:12

标签: php mysql database schema

我的用户表并非与众不同,并使用主要ID字段作为用户ID。

我的朋友表看起来像这样:

CREATE TABLE `friends` (
  `uid` INT NOT NULL ,                       
  `fid` INT NOT NULL ,                  
  PRIMARY KEY (`user_id`, `friend_id`)   
) ENGINE = MYISAM ;

我很容易找到一个用户的朋友,即

SELECT fid FROM friends WHERE uid = 12

这基本上会返回id格式的朋友列表,但是我不知道如何获取他们的用户名或其他数据的方法。我听说过外键(当然还有加入),我不知道如何选择我需要做的事情。

现在我做这个丑陋的方法:

SELECT username FROM users WHERE id IN (1,2,3,4..(other fid's)..)

它似乎没有。

我该怎么做?

4 个答案:

答案 0 :(得分:1)

如果您也发布了用户表格会更容易。 假设您有一个由以下字段组成的用户表:id,username,e-mail ......无论如何,您可以执行以下简单连接:

SELECT * FROM friends
INNER JOIN users
ON users.id = friends.fid
WHERE friends.uid = 1;

这样做当然会选择符合WHERE标准的朋友记录,并根据ON子句中定义的关系从这些记录中找到users表中的相应行。 (从技术上讲,在db引擎中它的工作方式稍有不同)在结果集中,一行将包含来自friend和users表的所有列,但是你可以通过定义SELECT来修改结果中的列:

SELECT friends.uid as uid, friends.fid as fid , users.username as username 

您不需要在friends表中显式定义外键来执行这样的简单连接。但这样做有助于您跟踪表之间的关系,此外,您可以在删除或更新行时使MySQL自动保持数据库的一致性。 http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

答案 1 :(得分:0)

你应该使用JOIN。你应该加入用户表的朋友表:

select
  f.fid,
  u.name as friend_name
from
  friends f
join
  users u on u.id = f.fid and f.uid = 16

答案 2 :(得分:0)

SELECT 
      u.username, 
      f.fid 
FROM 
      friends f, 
      users u 
WHERE 
      f.uid = 12 and 
      u.uid = f.fid

答案 3 :(得分:0)

首先,不要认为主键在您提供的创建表中有效

PRIMARY KEY (`user_id`, `friend_id`) 

您的表格中不存在这些列。

第二

SELECT users.username FROM friends,users WHERE users.id=friends.fid