似乎与当前用户无关,而是与任务受让人有关。无论谁分配任务,他都不应该将其分配给当前的受让人。
如果只能将一个用户分配给特定任务,则可以删除task_users
表,因为只需user_id
在表中添加列即可tasks
完成相同的工作。
假设你有桌子users
id | username |
---------------------
1 | A |
2 | B |
3 | C |
4 | X |
5 | Y |
并在表中tasks
id | title | user_id |
-----------------------------------
1 | Bla | 3 |
2 | Asd | NULL | // if this is even possible
如果您想检索可以分配给 task_id = 1 (Bla) 的人员,您可以简单地执行以下操作:
$currentTaskID = 1; // or however you retrieve them, it's just for the explanation purpose
SELECT id, username FROM users WHERE id != (SELECT user_id FROM tasks WHERE id = $currentTaskID);
输出将是:
id | username |
---------------------
1 | A |
2 | B |
4 | X |
5 | Y |
如果一项任务可以分配给多个用户,并且您将保留task_users
表格,我们可以想象您有:
task_id | user_id |
-------------------------
1 | 3 |
2 | NULL |
1 | 5 |
你可以这样查询:
$currentTaskID = 1; // or however you retrieve them, it's just for the explanation purpose
SELECT id, username FROM users WHERE id NOT IN (SELECT user_id FROM task_users WHERE task_id = $currentTaskID);
所以输出将是:
id | username |
---------------------
1 | A |
2 | B |
4 | X |
如果您在受理人中允许 NULL 值,因此任务没有分配给任何人,则 SELECT 将返回所有用户,因为WHERE id != NULL
当您没有 NULL id 时users
为了在某处显示当前用户,但无法分配,您应该在函数/方法中分离查询。
说你有:
function getAvailableAssignees($task_id) {
$sql = "SELECT id, username FROM users WHERE id != (SELECT user_id FROM tasks WHERE id = $task_id);";
$this->query($sql);
return $this->result();
}
和
function getCurrentAssignee($task_id) {
$sql = "SELECT user_id FROM tasks where id = $task_id;";
$this->query($sql);
return $this->result();
}
因此,一旦您需要显示可用的受让人,您就调用相应的方法,当您需要显示当前的受让人时,也可以这样做。