php - 如何解决这个复杂的 MySQL Query 问题
问题描述
我遇到了复杂的 PHP MySQL 查询问题。我希望你能帮助我。我尽我所能,尽可能清楚地解释一切。
- 这里有 2 个表(活动表和活动参与者表)
- 这是一对多的关系
- 注册存储在活动参与者表中。为了清楚起见,我还在解释中包含了活动表。
表活动
activityId name
1 Activity-01
2 Activity-02
3 Activity-03
4 Activity-04
标签活动参与者
activityParticipantId activityId personId date
55 1 28115 2020-05-28
66 2 34496 2020-05-28
67 3 34635 2020-05-28
88 4 12992 2020-05-28
此处要编写的查询必须满足这些条件。
- 一个人想要注册一个活动(例如:activityId -> 1)。
- 然后你得到这个人的personID(例如:235625)
- 在activityParticipant 表中,必须检查该人之前是否未注册过他想要注册的活动,还必须检查同一个人是否已经注册过另一个活动,但是这两个活动不属于同一日期。
不幸的是我无法解决这个问题。我希望你能帮助我。
提前致谢
解决方案
这实际上很容易——您只需要一个对两个相关列的组合的 UNIQUE 约束:
ALTER TABLE activityParticipant
ADD UNIQUE (activityId, personId);
现在,当您尝试插入与另一行重复的行时(例如,人 235625 想要第二次注册活动 1),查询将失败并出现错误。
要解决“同一个人在同一日期没有两个活动”问题,您可以对personId和date执行相同操作:
ALTER TABLE activityParticipant
ADD UNIQUE (date, personId);
现在人 235625 不能在同一日期注册两个不同的活动。
推荐阅读
- visual-studio-code - 可以让编辑器窗口选项卡动态调整大小以适应视图
- sql - 在 PostgreSQL 中查找和拆分字符串
- sql - 检查相同的 id 是否具有确定的条件
- angularjs - 如何通过索引访问数组中的数据以获取 AngularJs 中的重复项
- java - 卡夫卡和 OpenJDK
- azure - Azure 函数 - 事件中心触发器已停止
- c# - 如何动态创建 XML 文件?
- laravel - Laravel Model::find() 自动按 id 对结果进行排序,如何停止呢?
- google-apps-script - 如何在 GAS 中运行/调试私有函数?
- python - settimeout() 忽略 Try/Except 的异常 - Python