这是我在这里的第一个问题,对不起,如果我打破任何礼仪。 我有点喜欢编码,但有时我的大脑很难吞下逻辑步骤。
目前我正在开发自己的小型网络应用程序,在那里我有公共活动,而且我正在制作我自己的名单。
当时,我已经解决了这些问题:(我想是这样)
待办事项:
问题:
目前我从JSON字符串中获取所有与会者,然后转换为数组,将其全部放入数据库中。我无法决定SQL逻辑。
我列出了所有人员 - json-> array-> db然后它从db读取并显示wich被选中,而不是与来自JSON的表进行比较。
当前的算法是 - 获取json,并且在foreach循环中,每次我加载它在DB中写入,使用INSERT IGNORE它忽略它是否是相同的用户ID,所以我有所有参加者的数据库。
如何安排我的数据库?我正在考虑制作表格:
来宾 - USERID;活动ID;名称; [为所有人的巨大名单] 签到 - USERID; CHECKEDEVENTID;约会时间; [获取统计数据]
我的目标是制作“正在检查”门禁应用程序,所以最后我看到,那些和那些用户正在参加这些活动,而不是这些......
那么我怎样才能制作类似统计数据,比如 - EVENT - 参加X的Y人,以及更多的全局SQL查询,例如,USER Y来到EVENTS A,B,C。或者,大多数检查发生在时间跨度[可能是一些酒吧或图表] ....
我是否应该为每个事件新表格存储所有访客以查看所有参与者统计信息,并检查表格以查看统计信息?
答案 0 :(得分:0)
对于你所说的" Check"功能,听起来像你想要(大致*)下表:
create table users
(
userid float NOT NULL,
username varchar(64)
);
create table events
(
eventid float NOT NULL,
eventname varchar(64),
eventstart date,
eventlength float
);
create table checkin_activity
(
userid float not null,
eventid float not null,
checkin_time date
);
*这是一个高度简化的数据库架构。您需要确保添加必要的键,约束等,并确保列上的数据类型合适。我没有用这个简单的例子给出那么多的想法。
使用USERS和EVENTS表中的条目,您将使用您所指的" Check"填充CHECKIN_ACTIVITY表。按钮。您可以根据需要加入针对这些表的查询,以运行报告等。
注意:您提到:
当前的算法是 - 获取json,并且在foreach循环中,每次我加载它在DB中写入,使用INSERT IGNORE它忽略它是否是相同的用户ID,所以我有所有参与者的db
你应该避免在for循环中写入数据库(在我上面没有说明的表格中;让我们称之为EVENT_ATTENDEES表)。相反,构建一个 INSERT ALL 查询并执行一次,这样您就不会再次访问数据库的事务处理程序 n 。
INSERT ALL
INTO event_attendees (eventid, name) VALUES (1, 'John')
INTO event_attendees (eventid, name) VALUES (1, 'Jane')
INTO event_attendees (eventid, name) VALUES (1, 'Colin')
SELECT * FROM dual;
如果这种负荷是你经常做的事情,这一点尤其重要。