2015-10-25 3 views
0

Это мой текущий запрос mysql.Могу ли я отфильтровать мои результаты с предложением WHERE на основе результата из подзапроса в MySQL?

SELECT t.id, t.customer, t.indicator_tag, t.indicator_manu, t.indicator_model, t.created_at, t.updated_at, 
    (SELECT status FROM events WHERE ticket_id = t.id ORDER BY created_at DESC LIMIT 1) AS status, 
    (SELECT CONCAT(firstName, ' ', lastName) FROM users WHERE id = t.created_by) AS created_by, 
    (SELECT CONCAT(firstName, ' ', lastName) FROM users WHERE id = t.updated_by) AS updated_by 
    FROM tickets t 
    WHERE status = 'Pending' OR status = 'Diagnosed' OR status = 'Repaired' 
    ORDER BY t.customer ASC, status ASC, t.indicator_tag ASC; 

Предложение WHERE в приведенном выше описании не вызывает ошибок, но также не фильтрует ничего. Я до сих пор довольно новичок в SQL, поэтому я еще не слишком глубоко разбираюсь в JOINS. Следует также отметить, что таблица событий будет иметь несколько событий для каждого билета и что подзапрос в строке 2 будет просто захватывать новейший. Есть ли способ фильтровать результаты на основе данных из другой таблицы, но при этом захватывать только самое новое событие для каждого билета?

Говоря иначе:
СТОЛ билетов МНОГО события
события ПРИНАДЛЕЖИТ билет

HTML Output Example

В приведенном выше примере будет показывать результат, который я получаю. Обратите внимание, что это показывает только самый новый статус, а не все события, подобные тому, который он сделал бы на одной странице билета. Если бы я мог предоставить больше информации, я был бы рад помочь.

ответ

1

Использование HAVING:

SELECT t.id, t.customer, t.indicator_tag, t.indicator_manu, t.indicator_model, t.created_at, t.updated_at, 
    (SELECT status FROM events WHERE ticket_id = t.id ORDER BY created_at DESC LIMIT 1) AS status, 
    (SELECT CONCAT(firstName, ' ', lastName) FROM users WHERE id = t.created_by) AS created_by, 
    (SELECT CONCAT(firstName, ' ', lastName) FROM users WHERE id = t.updated_by) AS updated_by 
FROM tickets t 
HAVING status = 'Pending' OR status = 'Diagnosed' OR status = 'Repaired' 
ORDER BY t.customer ASC, status ASC, t.indicator_tag ASC; 

http://www.w3schools.com/sql/sql_having.asp

От docs:

предложения HAVING может ссылаться на любой столбец или псевдоним имени в select_expr в списке выбора или во внешних подзапросах.

Смежные вопросы