Запрос выборки данных - MySQL
Формулировка задачи:
Всем привет, помогите с написанием запроса.
имею запрос:
В цикле php прохожу все ev_objid. Как изменить запрос так что бы проверялось имеет ли текущий ev_objid, записи
ev_code='ВСКРЫТ КОРПУС'
ev_code='Неисправность основного питания'
ev_code='Восстановление основного питания'
ev_code='Неисправность резервного питания'
ev_code='Восстановление резервного питания'
ev_code='Неисправность ШС'
ev_code='Сброс тревоги и неисправности'
ev_code='Корпус закрыт'
Думаю понятно.
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='Корпус закрыт'
Решение задачи: «Запрос выборки данных»
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
с использованием подзапросов. Он проверяет различные коды событий для определенного объекта и даты, и выбирает план действий, основанный на наличии или отсутствии определенных событий. Вот список действий, которые он выполняет:
- Проверяет наличие события с кодом 'ВСКРТ КОРПУС'. Если это событие присутствует, запрос переходит к следующему шагу. Если нет, он возвращает план действий '80'.
- Проверяет наличие события с кодом 'Неисправность основного питания'. Если это событие присутствует, запрос переходит к следующему шагу. Если нет, он возвращает план действий '70'.
- Проверяет наличие события с кодом 'Восстановление основного питания'. Если это событие присутствует, запрос переходит к следующему шагу. Если нет, он возвращает план действий '60'.
- Проверяет наличие события с кодом 'Неисправность резервного питания'. Если это событие присутствует, запрос переходит к следующему шагу. Если нет, он возвращает план действий '50'.
- Проверяет наличие события с кодом 'Восстановление резервного питания'. Если это событие присутствует, запрос переходит к следующему шагу. Если нет, он возвращает план действий '40'.
- Проверяет наличие события с кодом 'Неисправность ШС'. Если это событие присутствует, запрос переходит к следующему шагу. Если нет, он возвращает план действий '30'.
- Проверяет наличие события с кодом 'Сброс тревоги и неисправности'. Если это событие присутствует, запрос переходит к следующему шагу. Если нет, он возвращает план действий '20'.
- Проверяет наличие события с кодом 'Восстановление основного питания'. Если это событие присутствует, запрос переходит к следующему шагу. Если нет, он возвращает план действий '10'. Пожалуйста, обратите внимание, что некоторые из этих шагов могут быть пропущены, если соответствующие события отсутствуют. В конце запрос фильтрует результаты по региону '19', объекту и дате, и сортирует их в порядке убывания плана действий и кода события. Он ограничивает результаты одной записью с помощью оператора LIMIT.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д