我们学校有一些非常受欢迎的课外活动,因为它有数百名成员,但只有少数导师,我们有严格的出勤政策,让会员在第三次无故之后被踢出不存在
我为运行活动而创建的PHP-JS-MySQL网站存储了人们在此MySQL表中参加会议的信息:
meetings_attendance (meetings_id, members_id, attendance, excuse)
在此表中,meetings_id
和members_id
是引用表中int
主键的索引,显然包括会议和成员。 attendance
是enum
,其值可以是"Pending"
,"Present"
,"Absent"
或"Excused"
,excuse
是{{} 1}}如果成员存在,可以保留为null。
由于我自己运行该程序,我不一定希望在网站中包含踢出功能(我想手动完成,在每个成员被踢出之前联系每个成员{{1 varchar(300)
表的行中的值设置为status
)。我正在尝试从members
表格中获取会员姓名,电子邮件地址和电话号码的列表:
"Inactive"
我一直在尝试各种MySQL查询组合来获取成员的缺席计数列表,但无济于事。我已经尝试过类似下面的内容了,我觉得我应该在某个地方使用members
,但我无法确切地确定在哪里或如何。
members (`id`, `firstname`, `lastname`, `email`, `phone`........)
答案 0 :(得分:1)
计算每个成员的缺席数并保留计数> = 3(使用GROUP BY和HAVING)。然后使用成员表连接这样找到的成员并显示结果:
select
m.firstname,
m.lastname,
m.email,
m.phone,
a.absences
from members m
join
(
select members_id, count(*) as absences
from meetings_attendance
where attendance = "Absent"
group by members_id
having count(*) >= 3
) a on a.members_id = m.id;
答案 1 :(得分:0)
SELECT firstname, lastname, email, phone, absences FROM members
WHERE id IN
(SELECT members_id FROM
(SELECT members_id, COUNT(*) FROM meetings_attendance
WHERE attendance = "Absent"
GROUP BY members_id
HAVING COUNT(*) >= 3 ) AS tab1)
答案 2 :(得分:0)
尝试格式化下面的代码并告诉我它是否能解决您的问题
SELECT *,(SELECT COUNT(*) FROM table2 WHERE table2.field1 = table1.id) AS count FROM table1 WHERE table1.field1 = 'value'