相关疑难解决方法(0)

学说2限制IN子查询

我正在尝试在Doctrine2中的IN语句中使用子查询.

以下是原始SQL查询的外观:

SELECT * FROM license 
WHERE id 
IN (SELECT id 
    FROM license 
    WHERE subscription = x 
    ORDER BY date DESC
    LIMIT 5)
ORDER BY name ASC;
Run Code Online (Sandbox Code Playgroud)

我想要做的是显示按名称排序的最后5个结果,所以我必须首先查询最后5个结果,然后在主查询中按名称排序.

问题是我似乎无法限制内部查询.

这是我目前的代码:

$qb = $this->createQueryBuilder('l');
$qb->select('l.id');
$qb = $this->whereSubscriptionId($qb, $subscription_id);
$qb = $this->offsetLimitOrder($qb, 0, 5, 'deliveryDatetime desc');

//Second Query, adds the "order by X"
$qb2 = $this->createQueryBuilder('l2');
$qb2->add('where', $qb2->expr()->in('l2.id', $qb->getQuery()->getDQL()));
if(isset($order)){
    $order = explode(' ', $order);
    $qb2->addOrderBy('l2.'.$order[0], $order[1]);
 }

 return $qb2->getQuery()
            ->getResult();
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我创建了我的第一个查询,我订购并限制它(通过自定义方法)然后我尝试在第二个查询中使用它.

但是,似乎LIMIT不是DQL语句的一部分,因为当我var_dump第一个查询的DQL时,LIMIT不存在,这意味着当我运行$ qb2-> getQuery() - > getResult()时,它被完全忽略.

我通过启动第一个查询并在第二个查询中手动输入结果来实现它,但它很难看.

关于如何正确地做到这一点的任何想法?

谢谢 …

subquery limit dql doctrine-orm

13
推荐指数
1
解决办法
2598
查看次数

使用doctrine 2 DBAL加入子查询

我正在重构Zend Framework 2应用程序以使用doctrine 2.5 DBAL而不是Zend_DB(ZF1).我有以下Zend_Db查询:

$subSelect = $db->select()
    ->from('user_survey_status_entries', array('userSurveyID', 'timestamp' => 'MIN(timestamp)'))
    ->where('status = ?', UserSurveyStatus::ACCESSED)
    ->group('userSurveyID');


$select = $db->select()
    // $selectColNames contains columns both from the main query and 
    // the subquery (e.g. firstAccess.timestamp AS dateFirstAccess).
    ->from(array('us' => 'user_surveys'), $selectColNames)
    ->joinLeft(array('firstAccess' => $subSelect), 'us.userSurveyID = firstAccess.userSurveyID', array())
    ->where('us.surveyID = ?', $surveyID);
Run Code Online (Sandbox Code Playgroud)

这导致以下MySQL查询:

SELECT `us`.`userSurveyID`, 
    // More columns from main query `us`
    `firstAccess`.`timestamp` AS `dateFirstAccess`
FROM `user_surveys` AS `us`
LEFT JOIN (
    SELECT `user_survey_status_entries`.`userSurveyID`, 
            MIN(timestamp) AS `timestamp` 
    FROM …
Run Code Online (Sandbox Code Playgroud)

php mysql query-builder doctrine-orm zend-framework2

8
推荐指数
2
解决办法
2万
查看次数

doctrine2 DQL子查询1行限制

我想做一个DQL查询,如:

$dql = "select p
        from AcmeDemoBundle:UserTypeA p 
        where p.UserTypeB = :id
        and (
                 select top 1 r.boolean
                 from AcmeDemoBundle:Registry r
             ) 
        = true";
Run Code Online (Sandbox Code Playgroud)

但似乎TOP 1它不是doctrine2中的有效函数.

我无法弄清楚如何将子查询的结果限制为一行.

subquery limit dql doctrine-orm

5
推荐指数
1
解决办法
2942
查看次数