我遇到问题我有3张桌子:
1 table named "members" (it has the members data, ID, Username, Password)
2 table named "schools" (it has list of schools ID, School_Name, School_Number)
3 table named "members_schools" (Here I two columns: User_ID, School_ID)
所以我正处于混乱之中,我需要实现一个排序或分组系统例如:圣彼得学校,8号,在"学校"表中有一个ID 1
用户有权从列表中选择这个学校,然后我进行了一个查询,将他们的选择保存在"members_schools"中,类似于:
User_ID :: Scool_ID
4 :: 1
这应该会让人想起:ID为4的用户正在ID为1的学校上学,这就是这里的"St.Peter学校"
现在我试着把桌子放在一起,但到目前为止运气不好!!我很困惑如何实现这一点,从三个表中检索数据并按此顺序显示在页面上。
School :: No. Attenders
School Of St.Peter :: "NUMBER OF MEMBERS WHO HAVE APPLIED FOR THIS SCHOOL"
谢谢大家。
在需要所有用户的详细信息之前,您不需要使用三个表。为了获得计数,我们只需要使用schools
和member_schools
表。
使用LEFT JOIN
,然后计算结果中的user_id
SELECT schools.School_Name AS School, IFNULL(COUNT(member_schools.User_ID),0) AS Number_of_Attenders
FROM schools LEFT JOIN member_schools
ON schools.ID = member_schools.School_ID
GROUP BY schools.School_name
样本输出
School :: Number_of_Attenders
School Of St.Peter :: 4
要显示所有成员的用户名,请使用GROUP_CONCT
SELECT schools.School_Name AS School, GROUP_CONCAT(members.Username) AS Attenders
FROM schools LEFT JOIN member_schools
ON schools.ID = member_schools.School_ID
INNER JOIN members
ON member_schools.User_ID = members.ID
GROUP BY schools.School_name
样本输出
School :: Attenders
School Of St.Peter :: Isaac, Kevin, Rockse, Aish
SELECT schools.School_name AS `School`, COUNT(0) AS `Nr. Attenders`
FROM schools INNER JOIN members_schools ON schools.id = members_schools.School_ID
GROUP BY schools.School_name
会给你每个学校的会员数量吗成员表与出席人数无关。