这是什么样的SQL子句?有什么方法可以将它转换为SQL吗?

时间:2010-09-30 16:03:55

标签: 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吗?

3 个答案:

答案 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:

  1. 用分号终止语句。
  2. IFNULL替换为COALESCE
  3. 从表名中删除单引号。
  4. 间距越大,看起来就像这样:

    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) 

分享并享受。