【发布时间】:2019-07-06 02:25:33
【问题描述】:
我有 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 |
+----+---------+---------+
这是我当前用于 MySQL 数据库的 SELECT 代码:
$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,但这对性能不利。
【问题讨论】:
-
在描述中,您的
tasks表中没有assigned_to列,而您的查询有,您的意思是user_id? -
@catcon 是的,很抱歉,我编辑了这篇文章。应该是
user_id
标签: php mysql join select union