Преобразование SQL в Doctrine DBAL или createQuery () - PullRequest
1 голос
/ 24 марта 2012

Как мне переписать этот запрос в запрос Doctrine DBAL или лучше создать структуру createQuery ()? Когда я использовал createQuery (), «data_last» не распознавался как дата, а как строка и генерировал ошибки. Может быть, лучшим решением было бы внутреннее левое соединение и вычисление на стороне Symfony? Функция ROUND не распознается доктриной.

   $sql='SELECT
    q.fund_id   AS tfi,
    f.fundName     AS name,

    ( SELECT `date`
      FROM quotes
      WHERE DATE_SUB( "'. $sToday .'", INTERVAL 1 MONTH ) <=  `date` AND `fund_id` = `tfi`
      ORDER BY `date` DESC
      LIMIT 1)           AS date_last,

    ( SELECT `value`
      FROM quotes
      WHERE `fund_id` = `tfi` AND `date` = `date_last`
      LIMIT 1)           AS value_last,


    ( SELECT `date`
      FROM quotes
      WHERE DATE_SUB( date_last, INTERVAL 1 MONTH ) <=  `date` AND `fund_id` = `tfi`
      ORDER BY  `date` ASC
      LIMIT 1)           AS date_1m,

    ( SELECT `value`
      FROM quotes
      WHERE `fund_id` = `tfi` AND `date` = `date_1m`
      LIMIT 1)           AS value_1m,

    ( SELECT ROUND( (value_last-value_1m)/value_1m*100, 2) ) AS chg_1m

    FROM quotes q
    LEFT JOIN funds  f
    ON ( q.fund_id = f.id )
    GROUP BY q.fund_id
    ORDER BY f.fundName';

1 Ответ

0 голосов
/ 24 марта 2012

Ого, я бы не стал тратить время на переписывание запросов этой сложности. Вам определенно лучше с Doctrine Native SQL

...