Что это за SQL-предложение?Любой способ преобразовать его в SQL? - PullRequest
1 голос
/ 30 сентября 2010

что это за 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)

Я использую propel в качестве ORM.

Любой способ конвертировать SQL такого типа в Mysql SQL?

Ответы [ 3 ]

2 голосов
/ 01 октября 2010

Этот запрос действителен в MySQL. Он выбирает все строки из таблицы prenotazione, где user_id - 18793, а prenotazione_stato_id - 10 или 11. Результирующие строки суммируются: в столбце numero вы получаете количество найденных строк, в * В столбце 1005 * вы получите сумму значений valutazione. Если строки не были выбраны, SUM() вернет NULL. Чтобы предотвратить это, применяется IFNULL([expr1],[expr2]), которое возвращает [expr1], если оно не равно нулю, и [expr2], если оно равно нулю. Это гарантирует, что вы всегда возвращаете номер.

Нет простого способа сделать это с помощью Propel, поскольку ваш результат не может быть легко сопоставлен с объектом Propel. Лучшее, что вы можете сделать, - это использовать базовый уровень базы данных (PDO) для экранирования ваших параметров и обработки результирующего набора, и вы не открываете дополнительное соединение с базой данных или что-то подобное.

1 голос
/ 01 октября 2010

При рассмотрении переносимости Standard SQL - ваш друг. Этот запрос может быть очень легко преобразован в Стандарт SQL-92:

  1. Завершить оператор точкой с запятой.
  2. Заменить IFNULL на COALESCE.
  3. Удалить одинарные кавычки из названия таблицы.

С лучшим интервалом это может выглядеть так:

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.

0 голосов
/ 30 сентября 2010

Использование 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) 

Делись и наслаждайся.

...