gpt4 book ai didi

mysql - 在 Laravel 中使用 where 子句从连接查询中获取数据

转载 作者:行者123 更新时间:2023-11-29 16:54:55 25 4
gpt4 key购买 nike

我正在使用 Laravel 和 AngularJS 创建一个系统,在其中将任务分配给用户。多个任务有多个用户,反之亦然。在数据库中,我有这个表:

任务:编号 |姓名

任务用户:编号 |任务 ID |用户 ID

用户:编号 |名称

在我看来,我使用任务表的 id 显示特定任务。我显示未分配给该特定任务的用户列表(称为未分配用户)。分配该用户后,其名称将从列表中删除。

为了实现此目的,我使用了以下查询:

    public static function remainingUser($task_id)
{
return \DB::table('users')
->leftjoin('task_users', 'task_users.user_id', '=', 'users.id')
->select('users.id',
'users.name as name'
)
->where('task_id', '!=', $task_id)
->orWhere('task_id', null)
->get();
}

假设我有这些数据

任务:

id |姓名

1 |任务1

2 |任务2

3 |任务3

用户:

id |名称

1 |用户1

2 |用户2

3 |用户3

4 |用户4

5 |用户5

6 |用户6

7 |用户7

8 |用户8

9 |用户9

10 |用户10

任务用户:

id |任务 ID |用户 ID

1 | 1 | 1

1 | 1 | 2

1 | 1 | 3

1 | 1 | 5

1 | 1 | 6

1 | 1 | 7

1 | 2 | 2

1 | 2 | 4

现在假设我正在显示 task_id = 1 的任务详细信息,并且我想将用户 4 分配给该任务。因此,我的未分配用户列表应包含所有未分配此任务的用户。我的查询没有返回所需的数据。我也在where子句中尝试了不同的条件,但我没有得到正确的所需数据。我做错了什么?

最佳答案

存在此问题的原因是,当您从用户中进行选择时,您会发现所有用户都已加入且具有单个任务实例。因此,如果 User1 具有 Task1Task2,则此处仅匹配 Task1,因为它将匹配 User1 到在 task_users 中为他找到的第一行。为了列出未签名的用户,您的查询将类似于以下内容:

public static function remainingUser($task_id)
{
return \DB::table('task_users')
->rightJoin('users', 'task_users.user_id', '=', 'users.id')
->select(
\DB::raw("DISTINCT(`users`.`id`)"),
'users.name as name'
)
->where('task_id', '!=', $task_id)
->orWhere('task_id', null)
->get();
}

关于mysql - 在 Laravel 中使用 where 子句从连接查询中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52613472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com