У меня есть две таблицы: одна называется встреча, другая - посещаемость, посещаемость - это реляционная база данных «многие ко многим» в следующем формате:
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 является либо владельцем_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)
Спасибо за ваше время,