SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 06.07.2011 04:54:46

TED
Участник
Зарегистрирован: 06.07.2011
Сообщений: 2

Помогите сделать запрос

Господа, доброго всем времени суток. Помогите с запросом.
Есть база данных, в которой хранятся заявки в ИТ отдел. Есть потребность посмотреть все заявки за месяц, как открытые так и закрытые (уже отработанные), причем если заявка открыта необходимо показать назначенного специалиста. Сделал следующее:

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)

Неактивен

 

#2 06.07.2011 17:50:46

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите сделать запрос

Сделайте отдельно закрытые, и отдельно открытые заявки (через UNION).

А какой смысл в том, чтобы уничтожать данные при закрытии?

Неактивен

 

#3 07.07.2011 05:08:38

TED
Участник
Зарегистрирован: 06.07.2011
Сообщений: 2

Re: Помогите сделать запрос

Огромное человеческое спасибо! Через Union все заработало. Хотя для меня так и осталась загадкой почему условный оператор IF не работал и как его использовать с циклом впринципе.

Данные в отработанных заявках мы не удаляем. Использовалась бесплатная база данных os ticket v1.6 все таблицы и часть запросов уже есть в ней. Механизм удаления специалистов в закрытых заявках пока неизвестен. На данный момент есть необходимость немного настроить ее под себя.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson