列中的复选框数据?

时间:2012-01-23 19:34:55

标签: php sql arrays database-design checkbox

培训课程数据库应该获得更新。 现在,每个新用户(由客户的客户编辑)都存储在给定的培训课程中(可由客户编辑)。用户被计算在内,因此永远不会超过f.a.每个培训课程有12个用户。

好的,这是旧概念。

对于新用户,每个新用户可以订阅更多课程,而不是使用复选框。 我现在遇到的困难是,我在给定列的SELECT / DELETE / UPDATE语句中处理数组概念时遇到了麻烦(sID是训练ID)

表培训课程

id | from_date             | til_date |          | ...   
---+-----------------------+---------------------+---------
2  |  2012-04-16 08:30:00  | 2012-04-16 08:30:00 | ...

表培训用户:

id | sID | name     | ...                          
---+-----+----------+---------------------------------------
1  |  2  | User A   | ...
2  |  6  | User B   | ...

我喜欢将不同课程写成一栏(2,4,7,9)与“,”分开的概念。 但是我会遇到问题,我不能再对该列进行COUNT。安全课程数据也只是将选中的课程输出到复选框。但客户的客户必须手动更新课程成员。所以我不能将每个课程“硬编码”到一个复选框。

有人知道如何正确地做到这一点吗?

谢谢和问候, 伯纳德

4 个答案:

答案 0 :(得分:1)

你至少需要三张桌子。

courses: (id, name, etc....)
users: (id, name, etc....)
user_courses: (user_id, course_id)

在课程中添加/删除用户只会涉及user_courses表的更新。新用户:添加记录,旧用户:删除记录。每个用户/课程配对在user_courses中为自己创建一条记录,您仍然可以非常轻松地完成计数。

将逗号分隔值嵌入到字段中会否定关系数据的整个目的。您失去了将数据相互关联的能力,因为您干净利落的用户< - >课程映射位于数据库/逗号中,而DB无法为您解释。

答案 1 :(得分:0)

我建议在userscourses之间创建一个联合表。使用逗号分隔字段对于您在此处所做的事情非常苛刻。

用户:

user_id | user_name | ...

课程:

user_id | course_name | ...

User_Course_Union

union_id | user_id | course_id | ...

然后,您可以轻松地根据SELECT COUNT(union_id) AS count WHERE ...进行查询,并获取您需要的所有数据。

答案 2 :(得分:0)

如果你有many-to-many关系(例如学生的课程),你通常应该使用它们之间的表格。也就是说,你应该有你的课程表,你的学生表,然后你的课程 - 学生表(或“注册”表)。注册表可能如下所示:

Id | Student | Course | Grade    |
1  | A       | 10     | Pass     |
2  | B       | 10     | Fail     |
3  | A       | 12     | Withdraw |

这表示学生A分为两门课程(10和12),两名学生(A和B)分别为10分。这样做的好处是可以保留特定于注册的数据,例如:等级或通过/失败状态(如示例所示)。

答案 3 :(得分:0)

我会做三张桌子。 userInformationcourseInformationuserCourseInformationuserCourseInformation会保留哪个用户正在参加哪些课程。

userInformation
user_id, user_name, etc..

courseInformation
course_id, course_name, etc..

userCourseInformation
user_course_id, user_id, course_id, etc..

所有注册的课程都在userCourseInformation上,并引用其他两个表id作为外键。如果要提供新课程,请将其添加到courseInformation。添加新用户,创建新的userInformation。当学生来来往往时,大多数UPDATE / DELETE / SELECT将在userCourseInformation上发生。您也可以使用标志(布尔值)来显示是否处于活动状态。这意味着您可以随时返回并查看过去的数据。