2013-03-24 86 views
0

我已經完成了關於使用join方法的研究,將表連接在一起,但我不僅要連接表,還要查詢一個語句,但我不知道如何將查詢連接在一起。將多個sql表和多個sql查詢組合成一個語句

我有三張桌子,一個叫朋友,一個叫用戶,一個叫啤酒。

用戶表:

name |編號

朋友表:

userID | friendName

啤酒桌:

userID |啤酒

我想找到給定用戶的所有朋友,並查詢得到每個用戶和朋友有的唯一啤酒的計數。

此前我使用php來「構建」sql語句來執行,這是在循環中做了很多sql調用,只是混亂。我知道必須有一個更有效的方式來做到這一點。

+0

朋友有他們的id或只是與userid相關的名字嗎? – peterm 2013-03-24 03:26:47

+0

只是他們的名字,我需要他們從用戶表中獲得他們的ID來從啤酒桌獲得他們的啤酒數量,因爲它只有他們的ID – Mike 2013-03-24 03:30:48

+0

那麼你需要一種方法將朋友與用戶聯繫起來,因爲現在如果我將朋友標識添加到朋友表中,您的模式中沒有 – peterm 2013-03-24 03:32:18

回答

1

工作例如:http://sqlfiddle.com/#!2/f1fdd/9

構建模式:

CREATE TABLE user(
    id int(11), 
    name varchar(50) 
); 
CREATE TABLE userFriends(
    userID int(11), 
    friendID int(11) 
); 
CREATE TABLE beer(
    beerID int(11), 
    beerName varchar(50) 
); 
CREATE TABLE friendBeer(
    userID int(11), 
    beerID int(11) 
); 
INSERT INTO user(id,name) VALUES(1,'friend 1'); 
INSERT INTO user(id,name) VALUES(2,'friend 2'); 
INSERT INTO user(id,name) VALUES(3,'friend 3'); 
INSERT INTO user(id,name) VALUES(4,'jeremy'); 

INSERT INTO userFriends(userID,friendID) VALUES(4,1); 
INSERT INTO userFriends(userID,friendID) VALUES(4,2); 
INSERT INTO userFriends(userID,friendID) VALUES(4,3); 

INSERT INTO beer(beerID, beerName) VALUES(1, 'amstel light'); 
INSERT INTO beer(beerID, beerName) VALUES(2, 'bud light'); 
INSERT INTO beer(beerID, beerName) VALUES(3, 'miller'); 

INSERT INTO friendBeer(userID, beerID) VALUES(1, 1); 
INSERT INTO friendBeer(userID, beerID) VALUES(2, 2); 
INSERT INTO friendBeer(userID, beerID) VALUES(3, 3); 
INSERT INTO friendBeer(userID, beerID) VALUES(4, 1); 
INSERT INTO friendBeer(userID, beerID) VALUES(1, 3); 

和查詢:

SELECT U.id, 
     U.name, 
     (SELECT count(beerID) 
     FROM friendBeer 
     WHERE userID = 4) AS "user beer count", 
     U2.name AS 'Friends name', 
     COUNT(FB2.beerID) 
FROM user U 
LEFT JOIN userFriends F 
    ON U.id = F.userID 
LEFT JOIN user U2 
    ON F.friendID = U2.id 
LEFT JOIN friendBeer FB2 
    ON F.friendID = FB2.userID 
LEFT JOIN friendBeer FB 
    ON U.id = FB.userID 
WHERE U.id = 4 
GROUP BY F.friendID, U.id 

我假設你會改變=1對什麼UserID是 - 但這節目你如何查詢工作。

+0

真棒,這有助於,但它看起來不像它包括我正在檢查的朋友誰的用戶。 – Mike 2013-03-24 03:06:11

+0

@Mike更新,現在應該工作得很好。 – 2013-03-24 03:06:50

+0

@Evan請學習[如何格式化您的帖子中的代碼] – peterm 2013-03-24 03:12:08

0
create table user(user_id int(11),user_name varchar(100)); 
create table friend(user_id int(11),friend_to int(11)); 
create table beer(user_id int(11),beer_name varchar(100)); 

insert into user values(1,'Evan'); 
insert into user values(2,'Mike'); 
insert into user values(3,'Roxetta'); 
insert into user values(4,'Rajesh'); 

insert into friend values(1,2); 
insert into friend values(1,3); 

insert into beer values(1,'sam bud'); 
insert into beer values(2,'carlsberg'); 
insert into beer values(2,'sam bud'); 
insert into beer values(2,'sam bud'); 

和SQL查詢

SELECT user.user_name, COUNT(DISTINCT(beer.beer_name)) `count` FROM beer JOIN `user` ON user.user_id=beer.user_id WHERE user.user_id=1 
UNION 
SELECT user.user_name,COUNT(DISTINCT(beer.beer_name)) FROM beer JOIN `user` ON user.user_id=beer.user_id 
WHERE user.user_id IN(SELECT friend_to FROM friend WHERE user_id=1); 

這是你在尋找什麼?