Задавайте вопросы, мы ответим
Вы не зашли.
Господа, доброго всем времени суток. Помогите с запросом.
Есть база данных, в которой хранятся заявки в ИТ отдел. Есть потребность посмотреть все заявки за месяц, как открытые так и закрытые (уже отработанные), причем если заявка открыта необходимо показать назначенного специалиста. Сделал следующее:
SELECT t.subject, tm.message, tm.created, t.closed, t.status
FROM ost_ticket AS t, ost_ticket_message AS tm
WHERE t.ticket_id = tm.ticket_id
OR t.status = "closed"
AND TO_DAYS( NOW( ) ) - TO_DAYS( tm.created ) <=30
LIMIT 0 , 100
Данный запрос отображает все заявки за месяц как открытые так и закрытые. Пытаюсь добавить в запрос назначенного специалиста:
SELECT t.subject, tm.message, tm.created, t.closed, t.status, tn.lastname
FROM ost_ticket AS t, ost_ticket_message AS tm, ost_staff AS tn
WHERE t.ticket_id = tm.ticket_id
AND tn.staff_id = t.staff_id
OR t.status = "closed"
AND TO_DAYS( NOW( ) ) - TO_DAYS( tm.created ) <=30
LIMIT 0 , 100
Этот запрос отображает полную чушь. Первые 5 строк отображает все верно - открытые заявки, даты их создания, назначенные специалисты все верно. А вот в закрытых....
У всех разные темы, НО одна и таже дата создания и время и один и тот же специалист, который уже уволился...
Господа, что не так?
PS. t.subject - тема заявки
tm.message - сообщение о проблеме
tm.created - дата и время создания заявки
t.closed - дата и время закрытия заявки
t.status - статус (закрыта или открыта заявка)
tn.lastname - фамилия назначенного специалиста
Разобрался почему в закрытых заявках информация отображается некорректно. Дело в том что в закрытых заявках специалист уже не назначен. Т.е. если t.status = "closed", то t.staff_id=0 и в этом случае он берет первого специалиста из таблицы ost_staff, а это как раз уволенный товарищ. Попробовал добавить IF THEN, но выдается синтаксическая ошибка в 5 строке. Что не так?
SELECT t.subject, tm.message, tm.created, t.closed, t.status, tn.lastname
FROM ost_ticket AS t, ost_ticket_message AS tm, ost_staff AS tn
WHERE t.ticket_id = tm.ticket_id
OR t.status = "closed"
IF (t.status = "open") THEN t.staff_id = tn.staff_id
ELSE tn.lastname = NULL
END IF
AND TO_DAYS( NOW( ) ) - TO_DAYS( tm.created ) <=30
LIMIT 0 , 100
Отредактированно TED (06.07.2011 07:54:56)
Неактивен
Сделайте отдельно закрытые, и отдельно открытые заявки (через UNION).
А какой смысл в том, чтобы уничтожать данные при закрытии?
Неактивен
Огромное человеческое спасибо! Через Union все заработало. Хотя для меня так и осталась загадкой почему условный оператор IF не работал и как его использовать с циклом впринципе.
Данные в отработанных заявках мы не удаляем. Использовалась бесплатная база данных os ticket v1.6 все таблицы и часть запросов уже есть в ней. Механизм удаления специалистов в закрытых заявках пока неизвестен. На данный момент есть необходимость немного настроить ее под себя.
Неактивен