将两个查询合并在一起

时间:2011-11-27 11:47:16

标签: php mysql

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%

但我需要的不仅是返回用户名,我还需要检查用户表中是否存在用户。

对不起,我希望我的问题很明确。谢谢!

5 个答案:

答案 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 = ?