这是什么类型的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吗?
答案 0 :(得分:2)
此查询在MySQL中有效。它会从prenotazione
表中选择user_id
为18793且prenotazione_stato_id
为10或11的所有行。汇总结果行:在numero
列中,您获得了找到的行数,在somma
列中,您可以获得valutazione
值的总和。如果未选择任何行,SUM()
将返回NULL
。为防止出现这种情况,我们会应用IFNULL([expr1],[expr2])
,如果它不为空则返回[expr1]
,如果为空则返回[expr2]
。这可以确保您始终返回一个数字。
使用Propel没有简单的方法,因为您的结果无法轻松映射到Propel对象。您可以做的最好的事情是使用底层数据库层(PDO)来转义参数并处理结果集,而不是打开额外的数据库连接或类似的东西。
答案 1 :(得分:1)
在考虑可移植性时,标准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语法。
答案 2 :(得分:0)
使用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)
分享并享受。