猿问

如何解决这个复杂的 MySQL 查询问题

我遇到了复杂的 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表中,必须检查该人之前是否没有注册过他想要注册的活动,并检查同一个人是否已经注册过另一个活动,但这两个活动不属于同一日期。

不幸的是我无法解决这个问题。我希望你能帮助我。


qq_花开花谢_0
浏览 89回答 1
1回答

翻过高山走不出你

它实际上非常简单 - 您所需要的只是对两个相关列的组合的唯一约束:ALTER TABLE activityParticipantADD UNIQUE (activityId, personId);现在,当您尝试插入与另一行重复的行时(例如人员 235625 想要第二次注册活动 1),查询将失败并出现错误。要解决“同一个人在同一日期不能进行两项活动”问题,您可以对personId和date执行相同的操作:ALTER TABLE activityParticipantADD UNIQUE (date, personId);现在,235625 号人员无法在同一天注册两项不同的活动。
随时随地看视频慕课网APP
我要回答