我的用户表并非与众不同,并使用主要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)..)
它似乎没有。
我该怎么做?
答案 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