Oke我的网站与Facebook Api合作,它将导入将要登录的用户的所有朋友(userId,name),因此我的表结构如下:
users: id, name
usersFriends: id, friendUserId, name
因此,当用户加入网站时,他们将获得导入的所有朋友,示例数据:
user: 237374734 (facebook user id), John brouwers (name of the user)
然后它将导入约翰的所有朋友。例如:
userFriends: 237374734 (John user id), 2737373, Michael jackson
现在我需要的是一个将通过朋友搜索(按名称)的查询,即 只是一个连接没有问题,但我需要的是在查询中我需要检查用户是否在我的网站上,所以让我们举一个例子:
我们与用户John一起登录,我们正在搜索michael以便
SELECT name FROM userFriends WHERE name LIKE %michael%
但我需要的不仅是返回用户名,我还需要检查用户表中是否存在用户。
对不起,我希望我的问题很明确。谢谢!
答案 0 :(得分:3)
修改:因此您需要一个按名称搜索朋友的查询,并检查朋友是否存在于用户表中,如下所示:
create table Users(
Id int not null,
primary key (Id),
Name varchar(50) not null
)TYPE=MyISAM;
create table UserFriends(
Id int not null,
foreign key (Id) references Users(Id),
FriendUserId int not null,
Name varchar(50) not null
)Type=MyISAM;
insert into Users(Id,Name) values(237374734,'John brouwers');
insert into UserFriends(Id,FriendUserId,Name)
values(237374734, 2737373, 'Michael jackson');
以下是查询姓名like "%Michael%"
并询问他是否是注册用户的查询:
select s.Id, s.Name,
case when exists
(
select Name from users where Name like "%Michael%"
) Then 'Registered User'
else
(
'Not Registered'
)
end
as 'Is Registered in My Website'
from
(
select uf.FriendUserId Id, uf.Name
from UserFriends uf
left join users u on u.Id = uf.friendUserId
where uf.name like "%Michael%"
) s
这会给你:
Id Name Is Registered in My Website
2737373 Michael jackson Not Registered
希望这会有所帮助,如果有任何问题,请不要犹豫。
答案 1 :(得分:2)
Select users.id
from users join usersFriends on users.id = usersFriends.friendUserId
where usersFriends.userId = ?
答案 2 :(得分:1)
select u.userId
from users u, usersFriends uf
where u.userId=uf.friendUserId and
u.userId=?
花些时间学习http://en.wikipedia.org/wiki/Join_(SQL)。这非常有用。
答案 3 :(得分:1)
您可以使用JOIN。请考虑以下示例查询:
SELECT u.id, u.name FROM users u, usersFriends uf
WHERE uf.friendUserId = u.id
AND uf.userId = ?
这样的查询应该有效,请注意,由于我们不知道您拥有的确切字段名称,因此您需要进行一些调整。
<强>更新强>
To show you that it DOES work:
create table users (id int, name varchar(100));
create table usersFriends (friendUserId int, userId int);
insert into users values (1, 'name 1'), (2, 'name 2'), (3, 'name 3');
insert into usersFriends values (1, 7), (5, 7);
mysql> SELECT u.id, u.name FROM users u, usersFriends uf
-> WHERE uf.friendUserId = u.id
-> AND uf.userId =7;
+------+--------+
| id | name |
+------+--------+
| 1 | name 1 |
+------+--------+
答案 4 :(得分:1)
理想情况下,您的usersFriends
表和users
表之间会有外部约束。这可确保始终存在相应的users
记录。要设置外键,您需要确保您的表都是InnoDB并添加约束,然后您可以使用:
ALTER TABLE usersFriends ADD FOREIGN KEY (friendUserId) REFERENCES users (id);
否则,您可以使用联接
SELECT *
FROM usersFriends f
JOIN users u on f.friendUserId = u.ID
WHERE f.userId = ?