优化SQL表以选择注册特定事件的参与者

时间:2012-11-15 17:58:25

标签: php mysql sql refactoring backend

我正在使用php开发参与者事件注册Web应用程序并遇到以下问题:

我们在大学里有多个活动,有大约4000名参与者。在注册台,参与者必须报名参加活动(单人/多人)。有一次,管理员必须能够锁定事件,以便参与者不再注册该事件(意味着事件已经开始)。然后,管理员需要能够打印出已注册每个事件的所有人的列表(在锁定之后)。

我们想出了这个:

  • 为“参与者”表格中的每个事件设置一个BOOLEAN列
  • 有一个多选字段作为事件输入的接口
  • implode()收到的数组
  • explode()结果
  • 设置foreach explod()ed事件,将BOOLEAN设置为1对照参与者

所以当管理员想要打印时,请将事件名称的BOOLEAN设置为1的所有参与者

这看起来有点难看,我们希望有人有更好的想法来解决这个问题。谢谢。

1 个答案:

答案 0 :(得分:4)

听起来你可以使用一些规范化。 “每个事件的布尔列”。所以,如果你有50个活动,你有50个专栏?有一个事件表,一个用户表和一个“events_users”表来链接两者,这将更有意义,例如:

create table events_users (
    user_id int,
    event_id int,
    primary key (user_id, event_id),
    foreign key (user_id) references users (id),
    foreign key (event_id) references events (id)
);

'lock'字段进入事件表。然后让参与者如此简单:

select user_id
from events_users
where event_id = XXX