工作例如: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
是 - 但这节目你如何查询工作。
朋友有他们的id或只是与userid相关的名字吗? – peterm 2013-03-24 03:26:47
只是他们的名字,我需要他们从用户表中获得他们的ID来从啤酒桌获得他们的啤酒数量,因为它只有他们的ID – Mike 2013-03-24 03:30:48
那么你需要一种方法将朋友与用户联系起来,因为现在如果我将朋友标识添加到朋友表中,您的模式中没有 – peterm 2013-03-24 03:32:18