相关疑难解决方法(0)

在Doctrine 2中执行WHERE .. IN子查询

我想从具有特定商品的所有订单中选择订单商品.在SQL中我会这样做:

SELECT DISTINCT i.id, i.name, order.name 
FROM items i 
JOIN orders o ON i.order_id=o.id 
WHERE o.id IN (
   SELECT o2.id FROM orders o2
   JOIN items i2 ON i2.order_id=o2.id AND i2.id=5
)
AND i.id != 5
ORDER BY o.orderdate DESC
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

如何使用查询构建器执行此查询?

sql database doctrine-orm

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

使用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万
查看次数