sql >> Databasteknik >  >> RDS >> Mysql

Gå med i subquery med doktrin 2 DBAL

Jag har hittat en lösning genom att anpassa detta DQL-exempel till DBAL. Tricket är att hämta den råa SQL-koden för underfrågan, slå in den inom parentes och gå med i den. Parametrar som används i underfrågan måste ställas in i huvudfrågan:

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


  1. Heroku Rails 4 kunde inte ansluta till servern:anslutningen nekades

  2. MySQL Workbench-rapporter är inte giltiga vid denna position för detta serverversionsfel

  3. Förstå resultatet av Execute Explain Plan i Oracle SQL Developer

  4. DAYOFMONTH() Exempel – MySQL