MySQL和PHP用于出席

时间:2011-11-02 18:48:31

标签: php mysql

我知道有很多不同的主题,但我不相信它们正是我正在寻找的。

我需要使用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列。

有人可以帮我解决这个问题吗?我认为这是一个非常简单的陈述我只是没有问谷歌正确的问题。感谢您提供任何帮助。

3 个答案:

答案 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

你可以删除他的很多查询,但它应该会有所帮助。