MySQL запрос на основе статуса заявки - PullRequest
0 голосов
/ 04 ноября 2011

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

При первом входе в систему они нажимают кнопку «Получить сетевой билет».

Билеты распределяются следующим образом:

  1. Первый: Open (самый старый билет со статусом Open)
  2. Второе: Ожидание (любые заявки со статусом Ожидание, когда дата ожидания = сегодня)
  3. Третий: Готов (самый старый, новый (неназначенный) билет)

Так что, если они нажмут кнопку «Получить далее», то будут искать самые старые открытые позиции, если их нет> выберите «Ожидание сегодня», если их нет> выберите самую старую Готовность.

Ниже приведен мой запрос, но он не работает надежно. Есть предложения?

    SELECT * 
    FROM support_case
    WHERE (
    case_status = 'Pending'
    AND case_queue = 'Software'
    AND pendDate = '12/15/2011')
    OR (
    case_status = 'Open'
    AND case_queue = 'Software')
    OR (
    case_status = 'Ready'
    AND case_queue = 'Software')
    ORDER BY lastUpdate ASC 
    LIMIT 0 , 1

1 Ответ

1 голос
/ 04 ноября 2011

Это отсортирует их по support_case, а затем по самому старому открытому.

Открыть будет отсортировано самым старым-> самым новым, затем будет отсортировано в ожидании, отсортировано самым старым-> самым новым, затем отсортировано по готовности, самым старым-> самым новым.

SELECT * 
FROM support_case
WHERE ( 
case_status = 'Pending' 
OR case_status = 'Open' 
OR case_status = 'Ready' )
AND case_queue = 'Software'
ORDER BY support_case ASC, lastUpdate ASC
LIMIT 1

Если у вас были разные значения состояния (которые были не совсем в алфавитном порядке), вы могли бы реструктурировать свою базу данных или добавить новый столбец, чтобы присвоить числовое значение вашему case_status. Затем вы можете добавить ORDER BY case_status_value DESC к вашему запросу.

Итак: 'Open' = 10 «В ожидании» = 5 «Готов» = 1

Так что сначала возвращаются Open, затем ожидающие, затем готовые. Тогда вы можете запросить:

SELECT * 
FROM support_case
WHERE ( 
case_status = 'Pending' 
OR case_status = 'Open' 
OR case_status = 'Ready' )
AND case_queue = 'Software'
ORDER BY case_status_value DESC,
lastUpdate ASC
LIMIT 1

См. Комментарии @ konerak ниже для другого варианта, который выполняет то же самое, без изменений структуры столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...