Как вы НЕ ПОЛЬЗУЕТЕСЬ ИЛИ ЛЕВЫМ СОЕДИНЕНИЕМ / НУЛЕМ с Propel ORM? - PullRequest
1 голос
/ 07 сентября 2011

Здравствуйте, я ищу, чтобы выбрать строки в моей базе данных, которые не находятся в другой таблице. Если строка с внешним ключом существует, я не хочу, чтобы строка таблицы была включена в набор результатов.

Например:

Group Table
Id - Title - Motto - Logo

Member Table
Id - FirstName - LastName

GroupMemberMap Table
Id - Group - Member

Я хочу получить всех участников, которые не относятся к группе.

Кто-нибудь знает, как это сделать с Propel?

Ответы [ 2 ]

2 голосов
/ 13 сентября 2011

Два примера:

Левое объединение

SELECT * FROM member m ЛЕВОЕ СОЕДИНЕНИЕ member_group mg ON mg.member_id = m.id WHERE mg.member_idIS 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 * ОТ члена m ГДЕ НЕ ВХОДИТ (ВЫБЕРИТЕ DISTINCT (member_id) ОТ члена_группы)

$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);

Дайте мне знать.:)

0 голосов
/ 07 сентября 2011

Можете ли вы быть более конкретным?

Otherwiste, используйте <>?

...