2012-01-19 3 views
1

С синтаксисом доктриной использованием Postgres как базы данных, можно сгенерировать запрос типа:Postgres "DISTINCT ON" эквивалент в синтаксисе доктрины. Symfony 1.4

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

вопрос по теме, которые могут помочь вам: HTTP://stackoverflow.com/questions/2148620/how-can-get-unique-values-from-data-table-using-dql –

+0

глядя на него. благодаря – hmontoliu

ответ

0

кажется, что Docrine не есть хороший способ, чтобы использовать„DISTINCT ON“. Также я не нашел способ использовать «DISTINCT» или -> distinct(), который соответствует потребностям, которые у меня были (у меня появилось много дерьмовых вещей, когда Doctrine строит SQL-запрос).

Наконец-то я сделал материал DISTINCT ON, используя другой подход. Вот SQL-запрос я использую сейчас:

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

Синтаксис Доктрина Я использовал, чтобы создать его из 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.')'); 
Смежные вопросы