2011-07-13 25 views
1

我有兩個表一個叫會議和一個叫上座率,上座率按以下格式是一個多對多的關係數據庫:PHP的Propel ORM MySQL的 - 左加入對多對多

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和/或行走做我創造的東西,會列出所有會議,其中(提供)user_id是無論是在會議owner_id OR值分別爲user_ID的,並邀請在簽到數據庫。

我要尋找的結果(基於以上數據)的用戶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) 

感謝您的時間,

+0

你想要做哪些事:讓誰擁有/所有用戶的用戶ID參加會議?或者你是否希望獲得特定用戶擁有/參與的所有會議(正如您的查詢似乎表明的那樣)? – TehShrike

+0

後者,對不起,你能指出這個問題在哪裏誤導你,所以我可以糾正這個問題嗎?該模式後 –

+0

第二款:「如何在SQL和/或行走做我創造的東西,會列出要麼在會議中owner_id OR值分別爲user_ID的,並邀請在簽到數據庫的所有用戶。」 – TehShrike

回答

0

這應該讓你由USER_ID 1擁有的所有會議,以及所有會議這是由user_id 1參加。

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` 
WHERE `meeting_meetings`.`owner_id` = 1 
UNION DISTINCT 
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` 
JOIN `meeting_attendance` ON `meeting_meetings`.`meeting_id` = `meeting_attendance`.`meeting_id` AND `meeting_attendance`.`invited` 
WHERE `meeting_attendance`.`user_id` = 1 

這有點笨重。就個人而言,我會考慮將owner標誌添加到meetings_attendance表。