2012-01-19 28 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」的學說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.')');