2016-04-13 56 views
3

我想从其他查询插入到当前查询得到最大日期。看看我的代码,请。Symfony组合2查询

数据:

inv_id inv_date inv_export inv_code 
1  2016-03-14 0   a2 
2  2016-03-13 0   a1 
3  2016-04-13 1   a1 
4  2016-03-14 0   a1 

结果:

for inv_export = 0 return a2 & a1 
for inv_export = 1 return a1 

MySQL的(工作正常):

SELECT ..., i.inv_date, i.inv_export 
FROM Sp.inventory AS i 
... 

WHERE i.inv_date IN (
    SELECT max(i.inv_date) from Sp.inventory WHERE i.inv_export = 1 
); 

我试图将其转换为symfony的:

$qb = $this 
    ->createQueryBuilder('i') 
    ->select('..., i.invDate') 
    ... 

    ->where('i.invExport = :export AND i.invDate = MAX(i.invDate)') 
    ->setParameter('export', $export); 
+0

你可以看看这个[Q/A(http://stackoverflow.com/questions/6637506/doing- a-where-in-subquery-in-doctrine-2),你会发现另一种方法。 –

回答

4

您可以使用子查询如下:

$sub = $this->createQueryBuilder('i2'); 
$sub->select("max(i2.inv_date)"); 
$sub->where("i.invExport= i2.invExport"); 


$qb = $this 
    ->createQueryBuilder('i') 
    ->select('..., i.invDate') 
    ... 
    ->where('i.invDate = ('.$sub->getDQL().')'); 
    ->andWhere('i.invExport = :export') 
    ->setParameter('export', $export); 

希望这有助于