Postgres "DISTINCT ON" эквивалент в синтаксисе доктрины. Symfony 1.4 - PullRequest
1 голос
/ 19 января 2012

С синтаксисом доктрины, использующим postgres в качестве базы данных, возможно ли сгенерировать запрос вроде:

SELECT 
DISTINCT ON (people.email)
*
FROM people
WHERE people.company SIMILAR TO '%companyA%|%companyB%|%...';

Пока у меня есть:

[...]
$query= Doctrine_Query::create()->from('People p')
        ->select('p.email, p.name, p.surname');

$alias= $query->getRootAlias();

foreach ($companies as $company){
    $query->orWhere($alias.'.name ilike ?', '%'.$company.'%');
}
[...]

Меня интересует эквивалент "DISTINCT ON" для Doctrine ORM

Спасибо

1 Ответ

0 голосов
/ 22 января 2012

Кажется, что у Docrine нет хорошего способа использовать "DISTINCT ON".Также я не нашел способа использования «DISTINCT» или -> Different (), который бы соответствовал моим потребностям (я получил много дурацких вещей, когда Doctrine строит SQL-запрос).ОТЛИЧАЙТЕСЬ от вещей, используя другой подход.Вот SQL-запрос, который я сейчас использую:

SELECT * 
FROM people 
WHERE id IN (SELECT min(id) 
             FROM people
             WHERE company 
             SIMILAR TO '%companyA%|%companyB%|%...')
GROUP BY company;

Синтаксис Doctrine, который я использовал для генерирования его из Symfony, более или менее:

$query = Doctrine_Query::create()->from('Company c')
         ->select('.....');
$innerquery  = Doctrine_Query::create()->from('Company ic')
         ->select('MIN(ic.id) AS id'); // important the "AS id"

$innerquery = (... stuff to get the company A, B, C in an andWhere() ...)

$innerquery->groupBy('ic.company');
$query->Where('c.id IN ('.$innerquery.')');
...