2012-03-24 2 views
1

어떻게하면이 쿼리를 Doctrine DBAL 쿼리로 다시 작성하거나 createQuery() 구조로 다시 작성할 수 있습니까? createQuery()를 사용할 때 "data_last"는 날짜가 아니라 문자열로 인식되고 오류가 발생했습니다. symfony 측에서 수행 한 내부 왼쪽 조인과 계산이 더 좋은 해결책일까요? ROUND 함수는 Doctrine에 의해 인식되지 않는다.SQL을 Doctrine DBAL 또는 createQuery()로 변환

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

답변

0

Whoa, 나는 이런 복잡한 질문을 다시 쓰려고 노력하지 않습니다. Doctrine을 사용하는 것이 더 낫습니다. Native SQL

+0

의견을 보내 주셔서 감사합니다. 왼쪽 조인 대신 내 하위 쿼리를 사용하는 것이 어떻습니까? 더 나은 해결책은 무엇일까요? – nysander