这是什么样的SQL子句?有没有办法把它转换成SQL?

这是什么样的SQL子句?有没有办法把它转换成SQL?,sql,propel,Sql,Propel,这是什么样的SQL SELECT IFNULL(SUM(prenotazione.VALUTAZIONE),0) AS somma, COUNT(*) AS numero FROM `prenotazione` WHERE prenotazione.USER_ID=18793 AND prenotazione.PRENOTAZIONE_STATO_ID IN (10,11) 我用推进作为我的ORM 有没有办法将这种SQL转换成Mysql SQL?使用Babelfish将意大利语粗略翻译

这是什么样的SQL

SELECT IFNULL(SUM(prenotazione.VALUTAZIONE),0) AS somma, 
COUNT(*) AS numero 
FROM `prenotazione` 
WHERE prenotazione.USER_ID=18793 AND 
prenotazione.PRENOTAZIONE_STATO_ID IN (10,11)
我用推进作为我的ORM


有没有办法将这种SQL转换成Mysql SQL?

使用Babelfish将意大利语粗略翻译成英语,结果是

SELECT IFNULL(SUM(reservation.APPRAISAL),0) AS sum,  
COUNT(*) AS number  
FROM `reservation`  
WHERE reservation.USER_ID=18793 AND  
reservation.RESERVATION_STATE_ID IN (10,11) 

共享和享受。

此查询在MySQL中有效。它从
prenotazione
表中选择所有行,其中
user\u id
为18793,
prenotazione\u stato\u id
为10或11。结果行被汇总:在
numero
列中,您获得找到的行数;在
somma
列中,您获得
valutazione
值的总和。如果未选择任何行,
SUM()
将返回
NULL
。为了防止出现这种情况,应用了
IFNULL([expr1],[expr2])
,如果不为null,则返回
[expr1]
,如果为null,则返回
[expr2]
。这确保您始终返回一个数字


使用“推进”没有简单的方法,因为您的结果无法轻松映射到推进对象。您可以做的最好的事情是使用底层数据库层(PDO)来转义参数并处理结果集,并且您不需要打开额外的数据库连接或类似的东西。

在考虑可移植性时,标准SQL是您的朋友。此查询可以非常轻松地转换为标准SQL-92:

  • 用分号终止语句
  • IFNULL
    替换为
    COALESCE
  • 从表名中删除单引号
  • 如果有更好的间距,它可以如下所示:

    SELECT COALESCE(SUM(prenotazione.VALUTAZIONE), 0) AS somma, 
           COUNT(*) AS numero 
      FROM prenotazione
     WHERE prenotazione.USER_ID = 18793 
           AND prenotazione.PRENOTAZIONE_STATO_ID IN (10,11);
    

    也就是说,对于MySQL,您可能需要撤销步骤3。。。这让我怀疑它首先是MySQL语法。

    看起来(使用反勾号引用,
    IFNULL
    ,等等),这已经是MySQL了…@user248959-查询到底有什么问题?@Beth MySQL支持意大利语表/列名,至少版本5.0。不是。。。完全确定这是如何回答这个问题的。这并不是说您可以对编写原始查询的数据库运行此操作,并期望它能够工作…@djacobson:目的是帮助个人理解查询正在做什么。问题似乎围绕着这样一个事实:数据库中的表、列等都是用意大利语命名的。通过提供翻译,我希望@user248959能够专注于查询,而不会被非英语名称搞得一团糟。AFAIK:COALESCE的好处是,它存在于Oracle、Mysql和Postgres中,其中IFNULL只存在于一两个中。