2011-11-27 60 views
3

奧凱我的網站工作與Facebook的API,這將導入將在,所以我的表結構會記錄用戶的所有朋友(用戶ID,名稱)如下:合併兩個查詢一起

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 

現在我需要的是,將搜索(按名稱)查詢過的朋友,這是 只需參加沒問題,但我需要的是在查詢中我需要檢查無論用戶是在我的網站上,以便讓我們的例子:

我們登錄時使用的用戶約翰,我們正在尋找邁克爾所以這將是

SELECT name FROM userFriends WHERE name LIKE %michael% 

但我需要的不僅是回報用戶的名字,我也需要檢查用戶是否存在s在用戶表中。

對不起,長期以來,希望我的問題是明確的。謝謝!

+0

如果您想快速解決問題,請放上您的表格結構。 –

+0

添加了表格結構。 – user1066101

+0

你給友誼命名?好的... –

回答

3

編輯:所以你需要通過名稱搜索朋友,並檢查users表中是否存在朋友的查詢,如下所示:

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'); 

這裏爲q uery將搜索發售者,他的名字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 

希望這將是有益的,如果有任何問題都毫不猶豫地問。

+0

正是感謝! – user1066101

+0

這就是我要去的地方。但查詢輸出應該是這樣的:array('id','name','onWebsite'),所以'onWebsite'應該在查詢中被選中,我該怎麼做? – user1066101

+0

我編輯了我的答案。 –

2
Select users.id 
from users join usersFriends on users.id = usersFriends.friendUserId 
where usersFriends.userId = ? 
+0

再次閱讀問題,我不需要加入,我想檢查朋友是否在用戶表 – user1066101

1
select u.userId 
from users u, usersFriends uf 
where u.userId=uf.friendUserId and 
u.userId=? 

以某個研究http://en.wikipedia.org/wiki/Join_(SQL)。這非常有用。

+0

我不需要加入查詢,我需要一個查詢,將獲得用戶的所有朋友和還要檢查用戶表中是否存在該朋友記錄 – user1066101

+0

我更新了示例以顯示它的工作原理,您只需要對其進行測試。 –

1

您可以使用JOIN。考慮下面的示例查詢:

SELECT u.id, u.name FROM users u, usersFriends uf 
WHERE uf.friendUserId = u.id 
AND uf.userId = ? 

像這樣的查詢應該工作,請記住,當我們不知道你有確切的字段名,你需要做一些調整。

UPDATE

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 | 
+------+--------+ 
+0

謝謝你的回答,但是,查詢是不正確的,我需要一個查詢,也將檢查用戶是否存在,你可能是一個朋友用戶不在數據庫中,你明白嗎? – user1066101

+0

查詢將執行此操作,這就是如何使用LEFT JOINT(如果您使用MySQL,則隱含在查詢中)。它只會返回用戶和用戶表中存在的記錄。 –

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 = ? 
+0

我知道我可以使用連接獲取用戶信息,但這不是我想要的,對不起,這個問題可能有點模糊,但我需要的是切入用戶表中是否存在該朋友 – user1066101