У меня есть 3 таблицы, users
и tasks
и completed_tasks
.Поэтому в основном я хочу выбрать все задачи, где user_id = 2
И также проверить, что задача не существует в другой таблице`. Вот мои таблицы:
users
таблица:
+----+-------+
| id | name |
+----+-------+
| 1 | John |
| 2 | Sally |
+----+-------+
tasks
таблица:
+----+-----------+---------+
| id | task_name | user_id |
+----+-----------+---------+
| 1 | mop floor | 2 |
| 2 | dishes | 1 |
| 3 | laundry | 2 |
| 4 | cook | 2 |
+----+-----------+---------+
completed_tasks
таблица:
+----+---------+---------+
| id | task_id | user_id |
+----+---------+---------+
| 1 | 1 | 2 |
+----+---------+---------+
Здесьмой текущий SELECT
код для моей базы данных MySQL:
$db = "SELECT DISTINCT tasks.task_name, users.name FROM tasks LEFT JOIN ON users.id = tasks.user_id WHERE tasks.user_id = 2";
У меня проблема в том, что я хочу выполнить поиск в таблице completed_tasks
, и если задача существует, то не выбирайтеэта задача.
Я попытался сделать это, добавив следующее, но это не сработало:
LEFT JOIN completed_tasks ON completed_tasks.user_id = 2
Это не сработало, потому что если бы у меня было несколько выполненных задач, он просто проигнорировал бы это.все вместе.
Я хочу, чтобы конечный результат возвращал имя пользователя и имя задачи 3 и 4.
Кроме того, производительность в моем приложении критическая .Я мог бы использовать PHP и перебирать массивы и делать SELECT
для каждого из них, но это не было бы хорошо для производительности.