你如何使用Propel ORM不进入或离开JOIN / IS NULL?

时间:2011-09-06 21:53:38

标签: php orm propel

您好我想在我的数据库中选择不在另一个表中的行。如果外键行存在,我不希望表行包含在结果集中。

例如:

Group Table
Id - Title - Motto - Logo

Member Table
Id - FirstName - LastName

GroupMemberMap Table
Id - Group - Member

我希望获得未分配给组的所有成员。

任何人都知道如何使用Propel做到这一点?

2 个答案:

答案 0 :(得分:2)

两个例子:

左连接

  

SELECT * FROM member m LEFT JOIN member_group mg ON mg.member_id = m.id WHERE mg.member_id IS NULL

$c = new Criteria();
$c->addJoin(MemberPeer::ID, MemberGroupPeer::MEMBER_ID, Criteria::LEFT_JOIN);
$c->add(MemberGroupPeer::MEMBER_ID, NULL, Criteria::ISNULL);

return MemberPeer::doSelect($c);

子查询

  

SELECT * FROM member m WHERE id NOT IN(SELECT DISTINCT(member_id)FROM member_group)

$c = new Criteria();
$subQuery = sprintf('SELECT DISTINCT(%s) FROM %s', MemberGroupPeer::MEMBER_ID, MemberGroupPeer::TABLE_NAME);
$c->add(MemberPeer::ID, MemberPeer::ID . ' NOT IN (' . $subQuery . ')', Criteria::CUSTOM);

return MemberPeer::doSelect($c);

让我知道。 :)

答案 1 :(得分:0)

你能更具体一点吗?

Otherwiste,使用<> ?