MySQL несколько операторов if - PullRequest
0 голосов
/ 09 июля 2020

У меня проблема с запросом MySQL. У меня есть большой запрос, который выбирает из нескольких таблиц, и он отлично работает. Я хотел бы отредактировать одну небольшую его часть.

Это небольшая часть, которую я хочу отредактировать. Эта часть работает нормально, но я хотел бы добавить к ней еще один оператор if.

round(if(m.id in (2280659, 2300116,3612005, 5309555), m.duration / 100, m.duration) / 60,1) as "Activity time in minutes"

Я бы хотел, чтобы это было что-то вроде этого, но я не могу понять синтаксис правильно. Я пробовал пример nested if , который я нашел на inte rnet, но это дает мне синтаксическую ошибку.

round(if(m.id in (2280659, 2300116,3612005, 5309555), m.duration / 100, m.duration, if m.id in (12312323, 2323232), m.duration / 1000, m.duration)) / 60,1) as "Activity time in minutes"

Я хочу m.duartion / 100 if m.id в (2280659, 2300116,3612005, 5309555), и я хочу m.duration / 1000 если m.id в (12312323, 2323232)

Надеюсь, я достаточно ясно . Я был бы признателен, если бы кто-нибудь мог указать мне в правильном направлении, спасибо!

РЕДАКТИРОВАТЬ 1: Изменен запрос, чтобы он соответствовал количеству скобок, но все еще безуспешно.

round(if(m.id in (2280659, 2300116,3612005, 5309555), m.duration / 100, m.duration, if (m.id in (12312323, 2323232), m.duration / 1000, m.duration)) / 60,1) as "Activity time in minutes"

Сообщение об ошибке:

com. mysql .jdb c .exceptions.jdbc4.MySQLSyntaxErrorException: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с 'if (m.id in (12312323, 2323232), m.duration / 10000, m.duration)) / 60,1) as " Тегевусе кесть на линии 3

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Конструкция IF () имеет вид

IF( condition is true, use this answer, else this answer)

Чтобы вложить, когда вы пытаетесь, вам нужно

IF( condition, this, IF( second condition, this, else default ) )

Вы также можете использовать case / when, что может упростить следовать

round( case when m.id in (2280659, 2300116,3612005, 5309555)
               then m.duration / 100
            when m.id in (12312323, 2323232)
               then m.duration / 1000
            else m.duration end
     / 60,  1) as "Activity time in minutes"
1 голос
/ 09 июля 2020

РЕДАКТИРОВАТЬ 1: изменен запрос в соответствии с количеством скобок, но все еще безуспешно.

После красивого форматирования проблема становится видимой:

round( 
       if( 
           m.id in (
                     2280659, 2300116,3612005, 5309555
                   ), 
           m.duration / 100, 
           m.duration, 
           if( 
               m.id in (
                         12312323, 2323232
                       ), 
               m.duration / 1000, 
               m.duration
             )
     ) / 60, 1
) as "Activity time in minutes"
  1. Внешняя IF () имеет 4 аргумента.
  2. Заключительная закрывающая скобка не имеет соответствующей открывающей скобки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...