У меня есть две таблицы, одна из которых называется «совещание», а другая — «посещаемость». Посещаемость — это реляционная база данных «многие ко многим» в следующем формате:
Attendance:
user_id | meeting_id | invited
--------+------------+--------
1 | 5 | 1
2 | 5 | 0
3 | 4 | 0
3 | 5 | 1
3 | 6 | 0
Встречи проходят в следующем формате:
Meetings:
meeting_id | meeting_name | owner_id
-----------+--------------+----------
3 | Awesome | 2
4 | Boring | 2
5 | Cool | 5
9 | Sexy | 3
Для каждого собрания может быть только одна строка собрания, но неограниченное количество строк посещаемости для каждого собрания (ограничено для каждого возможного пользователя для каждого собрания).
Как в SQL и/или Propel мне создать что-то, что будет перечислять все собрания, где (предоставленный) user_id является либо owner_id на собраниях, либо был user_id и приглашен в базе данных посещаемости.
Я ищу результат (на основе приведенных выше данных) при поиске идентификатора пользователя 3:
Result for userid3:
meeting_id | meeting_name | owner_id
-----------+--------------+----------
5 | Cool | 5 - Because userid 3 is attending meeting 5
9 | Sexy | 3 - Because userid 3 owns meeting 9
В настоящее время у меня есть следующее, которое на самом деле не работает и создает несколько строк на собрание (поскольку собрание существует более одного раза в базе данных посещаемости).
$criteria->addJoin(MeetingMeetingsPeer::ID, MeetingAttendancePeer::MEETING_ID, Criteria::LEFT_JOIN);
$criterion = $criteria->getNewCriterion(MeetingMeetingsPeer::OWNER_ID, Meeting::getUserId());
$criterion->addOr($criteria->getNewCriterion(MeetingAttendancePeer::USER_ID, Meeting::getUserId()));
$criteria->add($criterion);
return $criteria;
Что-то вроде приведенного ниже в SQL:
SELECT meeting_meetings.ID, meeting_meetings.OWNER_ID, meeting_meetings.GROUP_ID, meeting_meetings.NAME, meeting_meetings.COMPLETED, meeting_meetings.LOCATION, meeting_meetings.START, meeting_meetings.LENGTH, meeting_meetings.CREATED_AT, meeting_meetings.UPDATED_AT FROM `meeting_meetings` LEFT JOIN meeting_attendance ON (meeting_meetings.ID=meeting_attendance.MEETING_ID) WHERE (meeting_meetings.OWNER_ID=1 OR meeting_attendance.USER_ID=1)
Спасибо за ваше время,