2012-03-24 10 views
1

Wie kann ich diese Abfrage in Doctrine DBAL Abfrage oder besser in createQuery() Struktur schreiben? Bei der Verwendung von createQuery() wurde "data_last" nicht als Datum, sondern als String und generierte Fehler erkannt. Vielleicht wäre eine bessere Lösung die interne Linksverbindung und die Berechnung auf Symfony-Seite? Die ROUND-Funktion wird von Doctrine nicht erkannt.Konvertieren von SQL nach Doctrine DBAL oder 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'; 

Antwort

0

Whoa, ich hätte keine Zeit verschwenden, Abfrage, diese Komplexität zu umschreiben. Sie sind definitiv besser dran mit Doctrine Native SQL

+0

Vielen Dank für Ihre Meinung, wie wäre es mit meinen Unterabfragen anstelle von Links Joins? Was wäre eine bessere Lösung? – nysander