【问题标题】:Converting SQL to Doctrine DBAL or createQuery()将 SQL 转换为 Doctrine DBAL 或 createQuery()
【发布时间】:2012-03-24 08:14:12
【问题描述】:

如何将此查询重写为 Doctrine DBAL 查询或更好的 createQuery() 结构?当我使用 createQuery() 时,“data_last”未被识别为日期,而是被识别为字符串并生成错误。也许更好的解决方案是在 symfony 端进行内部左连接和计算? DOctrine 无法识别 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';

【问题讨论】:

    标签: sql symfony doctrine-orm dbal createquery


    【解决方案1】:

    哇,我不会浪费任何时间尝试重写查询这种复杂性。 Doctrine Native SQL

    【讨论】:

    • 谢谢你的意见,我的子查询而不是左连接怎么样?有什么更好的解决方案?
    猜你喜欢
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    相关资源
    最近更新 更多