Как я могу решить эту сложную задачу MySQL запроса - PullRequest
0 голосов
/ 04 августа 2020

У меня проблема со сложным PHP MySQL запросом. Надеюсь, ты мне поможешь. Я изо всех сил стараюсь объяснить все максимально хорошо и ясно.

  • Вот 2 таблицы (таблица активности и таблица activityParticipant)
  • Вот связь «один-ко-многим»
  • Регистрация сохраняется в таблице «Участник активности». Для ясности я также включил в пояснение таблицу действий.

Действия в таблицах

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).
  • Тогда вы получаете идентификатор человека (пример: 235625)
  • В таблице activityParticipant необходимо проверить, что человек ранее не был зарегистрирован для деятельности, на которую он хочет зарегистрироваться, а также проверить, есть ли то же самое. человек уже был зарегистрирован в другом мероприятии, но эти два мероприятия не относятся к одной и той же дате.

К сожалению, я не могу решить эту проблему. Надеюсь, вы мне поможете.

заранее спасибо

1 Ответ

1 голос
/ 04 августа 2020

На самом деле это довольно просто - все, что вам нужно, это ограничение UNIQUE для комбинации двух задействованных столбцов:

ALTER TABLE activityParticipant
ADD UNIQUE (activityId, personId);

Теперь, когда вы пытаетесь вставить строку, где есть дублирование, с другой строкой ( например, человек 235625 хочет зарегистрироваться во второй раз для действия 1), запрос завершится ошибкой.

Чтобы решить проблему «не может быть двух действий для одного и того же человека в один день», вы можете сделать то же самое для personId и date :

ALTER TABLE activityParticipant
ADD UNIQUE (date, personId);

Теперь человек 235625 не может зарегистрироваться для двух разных действий в один и тот же день.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...