我坚持使用mysql查询,这对我的糟糕程度来说似乎过于复杂。 任何帮助解决这个问题都将受到高度赞赏。
我有3张桌子:
_成员:所有成员的清单
_朋友:每个成员所有朋友的列表,使用2个字段:friends.id_member包含会员ID和friends.id_friend包含相应朋友的id。
_ comments:成员发布的所有评论的列表(使用字段comments.id_member将此表连接到表成员)
我想:
_(1):显示成员可能拥有的所有朋友(在此示例中为成员编号35;它运作良好)
SELECT friends.*, members.*
FROM friends
INNER JOIN members ON friends.id_friend=members.id
WHERE friends.id_member='35'
_(2):使用相同的mysql查询,获取其发布的每个朋友的评论数量(并非所有朋友都发布了评论;这是我的问题)。 我试过这个:
SELECT friends.*, members.*,
COUNT(comments.id_member) AS nb_comments
FROM friends
INNER JOIN members ON friends.id_friend=members.id
INNER JOIN comments ON comments.id_member=members.id
WHERE friends.id_member='35'
- >我只收到发表评论的朋友(没有发表评论的朋友,这应该在这里,被这个查询忽略),我得到的评论数量(nb_comments)是错误的。 另一个错误;如果成员根本没有朋友,则查询返回1行。
nb:a' LEFT JOIN评论评论.id_member = members.id'没有解决任何问题。
答案 0 :(得分:1)
执行我认为你想要的一种方法是使用子查询:
SELECT f.*, m.*,
(SELECT COUNT(*)
FROM comments c
WHERE c.id_member = m.id
) as nb_comments
FROM friends f INNER JOIN
members m
ON f.id_friend = m.id
WHERE f.id_member = 35;
将COUNT()
添加到SELECT
后,您可以将查询转换为聚合查询。如果没有GROUP BY
,则返回一行。
注意:
id_member
被声明为数字。