2013-03-24 67 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); 

这是你在寻找什么?