2012-03-24 69 views
1

如何將此查詢重寫爲Doctrine DBAL查詢或更好地創建Query()結構?當我使用createQuery()時,「data_last」不被識別爲日期,而是作爲字符串和生成的錯誤。也許更好的解決方案是在symfony方面進行內部左連接和計算?教義不能識別ROUND函數。將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

哇,我不會浪費任何時間試圖重寫查詢這種複雜性。你肯定更好與學說Native SQL

+0

謝謝你的意見,我的子查詢,而不是左連接怎麼樣?什麼是更好的解決方案? – nysander 2012-03-24 18:28:04