반응형
Zend_DB (ZF1) 대신 doctrine 2.5 DBAL을 사용하도록 Zend Framework 2 애플리케이션을 리팩토링하고 있습니다. 다음 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);
그 결과 다음 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 `user_survey_status_entries`
WHERE (status = 20)
GROUP BY `userSurveyID`
) AS `firstAccess` ON us.userSurveyID = firstAccess.userSurveyID
WHERE (us.surveyID = '10')
교리 2.5 쿼리 작성기를 사용하여 하위 쿼리를 조인하는 방법을 알 수 없습니다. 기본 쿼리에서 하위 쿼리에서 열을 선택해야합니다.
해결 방법
$subSelect = $connection->createQueryBuilder()
->select(array('userSurveyID', 'MIN(timestamp) timestamp'))
->from('user_survey_status_entries')
// Instead of setting the parameter in the main query below, it could be quoted here:
// ->where('status = ' . $connection->quote(UserSurveyStatus::ACCESSED))
->where('status = :status')
->groupBy('userSurveyID');
$select = $connection->createQueryBuilder()
->select($selectColNames)
->from('user_surveys', 'us')
// Get raw subquery SQL and wrap in brackets.
->leftJoin('us', sprintf('(%s)', $subSelect->getSQL()), 'firstAccess', 'us.userSurveyID = firstAccess.userSurveyID')
// Parameter used in subquery must be set in main query.
->setParameter('status', UserSurveyStatus::ACCESSED)
->where('us.surveyID = :surveyID')->setParameter('surveyID', $surveyID);
참조 페이지 https://stackoverflow.com/questions/34768821
반응형
'MySql' 카테고리의 다른 글
MySQL Doctrine 2 DQL CONCAT 필드 및 상수 문자열 (0) | 2020.11.14 |
---|---|
MySQL Select 문의 PHP 변수 (0) | 2020.11.14 |
MySQL ID : 외래 키를 만들 수 없습니다. 열에 인덱스가 없습니다. (0) | 2020.11.13 |
MySQL Docker 컨테이너에서 데이터 내보내기 (0) | 2020.11.13 |
MySQL 두 열의 차이를 얻는 방법 (0) | 2020.11.13 |
댓글