$c = new Criteria(); $crit0 = $c->getNewCriterion(TownsdistancesPeer::TOWN_A, $sf_user->getTown()->getId()); $crit1 = $c->getNewCriterion(TownsdistancesPeer::TOWN_B, $town->getId()); // Perform AND at level 1 ($crit0 $crit1 ) $crit0->addAnd($crit1); $crit2 = $c->getNewCriterion(TownsdistancesPeer::TOWN_A, $town->getId(); $crit3 = $c->getNewCriterion(TownsdistancesPeer::TOWN_B, $sf_user->getTown()->getId()); // Perform AND at level 1 ($crit2 $crit3 ) $crit2->addAnd($crit3); // Perform OR at level 0 ($crit0 $crit2 ) $crit0->addOr($crit2); $c->add($crit0); $result = TownsdistancesPeer::doSelect($c); // This loop will of course need to be edited to work foreach ($result as $obj) { //$val = $obj->getValue(); }