@Fedot01

Как выбрать запись на основе ограниченного количества записей дочерней таблицы?

Здравствуйте.

Есть две таблицы.
Первая содержит уникальные записи:
`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'.

Вот пример второй таблицы:
f12e3313a5ce580896a47dca98c3d4f7.png

Запись с 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 в самом подзапросе и сделать так не получится.
Прошу помощи в решении моей задачи.
  • Вопрос задан
  • 2547 просмотров
Пригласить эксперта
Ответы на вопрос 1
@DDanya
Используй JOIN
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
28 нояб. 2024, в 13:00
70000 руб./за проект
28 нояб. 2024, в 12:59
30000 руб./за проект
28 нояб. 2024, в 12:58
5000 руб./за проект