我知道有很多不同的主题,但我不相信它们正是我正在寻找的。
我需要使用MySQL为我所在的俱乐部建立一个数据库。我想创建一个秘书可以登录并参加会议的网页。首先,我需要知道创建表格到底需要什么。
我在想像
这样的东西CREATE TABLE 'Members'('memberName' VARCHAR(40) NOT NULL,
'11/1/11' INT NOT NULL DEFAULT 0,
'totalAttendance' INT NOT NULL DEFAULT 0,
PRIMARY KEY('memberName'), UNIQUE INDEX 'memberName'_UNIQUE('memberName' ASC));
并使用ALTER TABLE 'Members' ADD '11/8/11' INT NOT NULL DEFAULT 0;
我打算使用PHP来创建列,并将默认值0更改为1,如果他们参加了(不完全确定我将如何做到这一点但我正在考虑一些复选框,如果他们被选中则编辑该列那个名字?)所以我相信mysql_query("UPDATE 'Member' SET 'meetingDate'='1' WHERE memberName='nameOfMember'")
or die(mysql_error());
。
我真正需要的是一种计算每个列的计数方式,以计算每个成员参加的总次数,然后将其放入totalAttendance列。
有人可以帮我解决这个问题吗?我认为这是一个非常简单的陈述我只是没有问谷歌正确的问题。感谢您提供任何帮助。
答案 0 :(得分:4)
请请 请不要这样做。
将每个日期设为新行。 制作日期栏。
所以你的表看起来像这样:
ID | Date | Attendance |
1 | 2011-11-01 | 5 |
2 | 2011-11-02 | 12 |
3 | 2011-11-03 | 3 |
然后你可以有一张成员表。
然后你可以有一个会员联接表。 -
然后,如果你有了这个,你甚至不需要会议表中的Attendance
列,因为你可以用一个简单的查询来计算每次会议的成员数量:
SELECT m.id, m.date, count(*) as `attendance`
FROM meeting m
LEFT JOIN meeting_to_member mm ON mm.meetingid = m.id
LEFT JOIN member mem ON mem.id = mm.memberid
GROUP BY m.id;
答案 1 :(得分:2)
我建议您设置如下内容:
id | MeetingDate | MemberName | Present
1 | 2011-11-01 | John Doe | 1
2 | 2011-11-01 | John Smith | 0
3 | 2011-11-01 | John Jackson | 1
4 | 2011-11-02 | John Doe | 0
5 | 2011-11-02 | John Smith | 1
6 | 2011-11-02 | John Jackson | 1
7 | 2011-11-03 | John Doe | 1
8 | 2011-11-03 | John Smith | 1
9 | 2011-11-03 | John Jackson | 1
因此,每次会议的每个成员都有一行,无论他们是否参加。我猜你用这个系统不会有数百万行,所以不要担心性能。
您可以通过以下内容获得会员的总出席率:
SELECT SUM(Present) as total FROM attendance WHERE MemberName = 'John Doe';
// returns -> 2
您可以通过以下方式获得会议的总出席率:
SELECT SUM(Present) as total FROM attendance WHERE MeetingDate = 2011-11-01;
// returns -> 2
您可以通过以下方式获取错过特定会议的所有成员:
SELECT MemberName FROM attendance WHERE Present = 0 AND MeetingDate = 2011-11-01;
// returns -> John Smith
答案 2 :(得分:0)
您可以尝试将INSERT用于... SELECT COUNT ...
看看这个人的代码: insert ...select ... count ... on duplicate key update error
你可以删除他的很多查询,但它应该会有所帮助。