Как получить одну любую запись из таблицы, с условием что в связанной таблице не будет записи с определенным значением?

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Аватара пользователя
MarkL
Сообщения: 68
Зарегистрирован: 2017.07.05, 20:37

Как получить одну любую запись из таблицы, с условием что в связанной таблице не будет записи с определенным значением?

Сообщение MarkL »

Сразу приведу пример, чтобы не запутать:
У нас есть 2 заказа: "Собрать яблока", "Собрать груши" и исполнитель Петя. Петя уже взял заказ "Собрать яблока", и просит ещё один. Давать Пете повторно заказ "Собрать яблоки" не нужно - он ведь уже его взял, значит нужно дать заказ "Собрать груши".
Есть таблица order и связанная с ней task. Мне нужно получить одну любую запись order с условием что в связанной таблице task нет записи с определенным ID(например: 5) в поле task.executor_id.

Структура и связи

Изображение

Я написал следующий запрос:

Код: Выделить всё

SELECT `order`.* FROM `order` 
LEFT JOIN `task` ON `order`.`id` = `task`.`order_id` 
WHERE (`order`.`status`=10) AND
(`order`.`type`='10') AND
(`task`.`executor_id` != 5)
LIMIT 1
Он не сработал, похоже допустим ошибку:
а) Если записей в "task" нет вовсе: никакой записи не находится.
б) Если запись в "task" есть: находится запись, которая уже давалась текущему исполнителю(executor_id).

Вопрос в рамках данной задачи: Как получить одну любую запись с таблицы order с условием, что в связанной таблице task нет записи с определенным значением(например: 5) в поле task.executor_id?
Ответить