【发布时间】:2011-07-13 16:54:30
【问题描述】:
我有两张表,一张叫会议,一张叫出勤,出勤是一个多对多关系数据库,格式如下:
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 和受邀者。
我在搜索以下用户 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)
感谢您的宝贵时间,
【问题讨论】:
-
你想做什么:获取所有拥有/参加会议的用户的用户ID?或者您是否想要获取由特定用户拥有/参加的所有会议(如您的查询所示)?
-
后者,抱歉,您能指出问题在哪里误导了您,以便我更正吗?
-
架构后的第二段:“我如何在 SQL 和/或 Propel 中创建一些内容,以列出所有用户,这些用户要么是会议中的 owner_id,要么是 user_id 并在出席数据库中被邀请。”
-
更正并添加了一个新表 xD ty
标签: php mysql join symfony1 propel