我目前正在开发一个活动源网站。与此相关的概念的一部分:
目前,我有一个事件表,用于存储有关事件的详细信息,并且包含 going_count 列。另一个表 event_userlist 有两列:
event_id_count (PRIMARY KEY) and user_id
当用户点击某个事件的前进按钮时,该事件的 going_count 将从事件表中检索,增加1,与event_id连接(从而形成像4p6ZDpPW9_10这样的东西并存储在变量$ eid_count中。
从会话中检索用户ID并将其存储在变量$ uid中。 然后将 $ eid_count 和 $ uid 插入表 event_userlist的 event_id_count 和 user_id 列中即可。成功插入后,我会更新going_count。
我想知道是否可以进行更改以使流程更高效和可扩展。
其次,在Feed上显示事件时,我需要检查用户是否已经是事件列表的一部分,如果是,则显示取消按钮。 最好的方法是什么?
现在我正计划使用以下查询检索每个事件的用户列表:
SELECT user_id FROM event_userlist WHERE event_id_count LIKE '$eid%'
然后检查当前用户是否在该查询的结果中。这是可扩展的吗?
答案 0 :(得分:1)
我建议稍微重构数据存储,而不是将计数混合到实际的存储机制中。
如果没关系,我会使用表名events
,attendants
和users
,每个表都有一个id
(主键), event_id
的{{1}} + user_id
。这些是我的示例中的最低限度,表格当然可以包含其他字段,但attendants
不需要:
attendants
仅供参考,这是N:M关系。
如果用户参与(点击“进入”按钮)特定事件,则会在+----------+---------------+----------+
| events | attendants | users |
+----------+---------------+----------+
| ID (key) | ID (key) | ID (key) |
| name | user_id (fk) | name |
| | event_id (fk) | |
+----------+---------------+----------+
中使用指定的attendants
创建新行(与user_id
用户匹配正在参加)和指定的ID
(与用户参加的活动的event_id
匹配)。
这样,某个用户可以参加任何活动,每个活动都可以有任意数量的与会者。
然后,您可以快速执行各种操作,,例如:
计算特定事件的参加人数(按事件ID,以下示例中为32):
ID
获取参加特定活动的用户列表(按事件ID):
SELECT COUNT(*) AS `count` FROM `attendants` WHERE event_id=32;
这个名单还在继续。简而言之,您始终可以告知给定用户正在参与哪些事件以及哪些用户正在参与某个事件。由此,您可以轻松判断“当前”用户是否有人参加活动,计算服务员人数等等...
<强>更新强>
正如评论中所讨论的,SELECT u.ID, u.name FROM `users` AS u INNER JOIN `attendants` AS a ON u.ID = a.user_id WHERE a.event_id=32;
ID
可以选择性地跳过,因为attendants
和event_id
在这种情况下构成compound primary key。