現在のユーザーではなく、タスクの担当者のようです。誰がタスクを割り当てても、そのタスクを現在の担当者に割り当てることはできません。
特定のタスクに 1 人のユーザーしか割り当てることができない場合は、テーブルを削除できます。これは、テーブルに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 値を許可して、タスクが誰にも割り当てられないようにすると、WHERE id != NULL
NULL ID がないため、SELECT はすべてのユーザーを返します。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();
}
したがって、利用可能な担当者を表示する必要がある場合は、それぞれのメソッドを呼び出します。現在の担当者を表示する必要がある場合も同様です。