Запрос выборки данных - MySQL

Узнай цену своей работы

Формулировка задачи:

Всем привет, помогите с написанием запроса. имею запрос:
Select 
ev_objid,
ev_code
from
events
where 
ev_code='ВСКРЫТ КОРПУС' or
ev_code='Неисправность основного питания' or
ev_code='Восстановление основного питания' or
ev_code='Неисправность резервного питания' or
ev_code='Восстановление резервного питания' or
ev_code='Неисправность ШС' or
ev_code='Сброс тревоги и неисправности' or
ev_code='Корпус закрыт'
В цикле php прохожу все ev_objid. Как изменить запрос так что бы проверялось имеет ли текущий ev_objid, записи ev_code='ВСКРЫТ КОРПУС' ev_code='Неисправность основного питания' ev_code='Восстановление основного питания' ev_code='Неисправность резервного питания' ev_code='Восстановление резервного питания' ev_code='Неисправность ШС' ev_code='Сброс тревоги и неисправности' ev_code='Корпус закрыт' Думаю понятно.

Решение задачи: «Запрос выборки данных»

textual
Листинг программы
SELECT ev_code,
    IFNULL(IF(ev_code='ВСКРЫТ КОРПУС',
    (SELECT IFNULL(IF(ev_code='Неисправность основного питания',
    (SELECT IFNULL(IF(ev_code='Восстановление основного питания',
    (SELECT IFNULL(IF(ev_code='Неисправность резервного питания',
    (SELECT IFNULL(IF(ev_code='Восстановление резервного питания',
    (SELECT IFNULL(IF(ev_code='Неисправность ШС',
    (SELECT IFNULL(IF(ev_code='Сброс тревоги и неисправности',
    (SELECT IFNULL(IF(ev_code='Корпус закрыт',8,0),80) AS plan
        FROM events
    WHERE ev_objid='$ev_objid' AND ev_code='Корпус закрыт' AND ev_date>='$ev_date' AND ev_date<='$ev_date 23:59:59' GROUP BY plan),0),70) AS plan
        FROM events
    WHERE ev_objid='$ev_objid' AND ev_code='Сброс тревоги и неисправности' AND ev_date>='$ev_date' AND ev_date<='$ev_date 23:59:59' GROUP BY plan),0),60) AS plan
        FROM events
    WHERE ev_objid='$ev_objid' AND ev_code='Неисправность ШС' AND ev_date>='$ev_date' AND ev_date<='$ev_date 23:59:59' GROUP BY plan),0),50) AS plan
        FROM events
    WHERE ev_objid='$ev_objid' AND ev_code='Восстановление резервного питания' AND ev_date>='$ev_date' AND ev_date<='$ev_date 23:59:59' GROUP BY plan),0),40) AS plan
        FROM events
    WHERE ev_objid='$ev_objid' AND ev_code='Неисправность резервного питания' AND ev_date>='$ev_date' AND ev_date<='$ev_date 23:59:59' GROUP BY plan),0),30) AS plan
        FROM events
    WHERE ev_objid='$ev_objid' AND ev_code='Восстановление основного питания' AND ev_date>='$ev_date' AND ev_date<='$ev_date 23:59:59' GROUP BY plan),0),20) AS plan
        FROM events
    WHERE ev_objid='$ev_objid' AND ev_code='Неисправность основного питания' AND ev_date>='$ev_date' AND ev_date<='$ev_date 23:59:59' GROUP BY plan) ,0),10) AS plan
    
FROM events
WHERE ev_region='19' AND ev_objid='$ev_objid' AND ev_date>='$ev_date' AND ev_date<='$ev_date 23:59:59'
GROUP BY ev_code 
ORDER BY plan DESC, ev_code LIMIT 1

Объяснение кода листинга программы

Ваш запрос является сложным запросом на выборку данных из таблицы events с использованием подзапросов. Он проверяет различные коды событий для определенного объекта и даты, и выбирает план действий, основанный на наличии или отсутствии определенных событий. Вот список действий, которые он выполняет:

  1. Проверяет наличие события с кодом 'ВСКРТ КОРПУС'. Если это событие присутствует, запрос переходит к следующему шагу. Если нет, он возвращает план действий '80'.
  2. Проверяет наличие события с кодом 'Неисправность основного питания'. Если это событие присутствует, запрос переходит к следующему шагу. Если нет, он возвращает план действий '70'.
  3. Проверяет наличие события с кодом 'Восстановление основного питания'. Если это событие присутствует, запрос переходит к следующему шагу. Если нет, он возвращает план действий '60'.
  4. Проверяет наличие события с кодом 'Неисправность резервного питания'. Если это событие присутствует, запрос переходит к следующему шагу. Если нет, он возвращает план действий '50'.
  5. Проверяет наличие события с кодом 'Восстановление резервного питания'. Если это событие присутствует, запрос переходит к следующему шагу. Если нет, он возвращает план действий '40'.
  6. Проверяет наличие события с кодом 'Неисправность ШС'. Если это событие присутствует, запрос переходит к следующему шагу. Если нет, он возвращает план действий '30'.
  7. Проверяет наличие события с кодом 'Сброс тревоги и неисправности'. Если это событие присутствует, запрос переходит к следующему шагу. Если нет, он возвращает план действий '20'.
  8. Проверяет наличие события с кодом 'Восстановление основного питания'. Если это событие присутствует, запрос переходит к следующему шагу. Если нет, он возвращает план действий '10'. Пожалуйста, обратите внимание, что некоторые из этих шагов могут быть пропущены, если соответствующие события отсутствуют. В конце запрос фильтрует результаты по региону '19', объекту и дате, и сортирует их в порядке убывания плана действий и кода события. Он ограничивает результаты одной записью с помощью оператора LIMIT.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5