【问题标题】:Postgres "DISTINCT ON" equivalent in doctrine syntax. Symfony 1.4Postgres "DISTINCT ON" 等效于学说语法。 Symfony 1.4
【发布时间】:2012-01-19 18:16:03
【问题描述】:

使用 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.'%');
}
[...]

我对 Doctrine ORM 的“DISTINCT ON”等价物感兴趣

谢谢

【问题讨论】:

标签: postgresql symfony1 doctrine


【解决方案1】:

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 生成它的 Doctrine 语法或多或少:

$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.')');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-13
    • 2017-05-19
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    相关资源
    最近更新 更多