这是什么样的SQL子句?有没有办法把它转换成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将意大利语粗略翻译
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只存在于一两个中。