Здравствуйте.
Есть две таблицы.
Первая содержит уникальные записи:
`id` int(11)
`name` varchar(32)
Вторая таблица - лог действий:
`id` int(5) // Автоинкрементый столбец
`name_id` int(5) // id из первой таблицы
`result` enum('check', 'error') // результат действия
`type` enum('type1', 'type2', 'type3') // тип действия
Нужно одним запросом из первой таблицы выбрать запись, для которой во второй таблице не найдется хотя бы одного результата действия для каждого типа, который бы заканчивались подряд 3 `result` = 'error'.
Вот пример второй таблицы:
Запись с name_id = 1 должна быть возвращена, так как не для всех `type` нашлись записи с 3 error подряд.
Я пробовал сделать что-то вроде такого запроса, но, видимо, так делать нельзя:
SELECT *, @tid := `id` FROM `table1` as `t1` WHERE (
SELECT count(*) as `error` FROM
(
(SELECT `result` FROM `log` as `l` WHERE `l`.`name_id` = @tid AND `type` = 'type1' ORDER BY `l`.`id` DESC LIMIT 3)
UNION ALL
(SELECT `result` FROM `log` as `l` WHERE `l`.`name_id` = @tid AND `type` = 'type2' ORDER BY `l`.`id` DESC LIMIT 3)
UNION ALL
(SELECT `result` FROM `log` as `l` WHERE `l`.`name_id` = @tid AND `type` = 'type3' ORDER BY `l`.`id` DESC LIMIT 3)
) as `e`
WHERE `result` = 'error') < 9
Видимо @tid, всегда будет NULL в самом подзапросе и сделать так не получится.
Прошу помощи в решении моей задачи.