$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);
// Remember to change the peer class here for the correct one in your model
$c->add($crit0);
$result = TablePeer::doSelect($c);
// This loop will of course need to be edited to work
foreach ($result as $obj)
{
//$val = $obj->getValue();
}