2

我有一个具有类似结构的数据库(为清楚起见进行了简化):

用户

  • ID
  • 姓名

任务

  • ID
  • 姓名
  • 团体

任务链接

  • 用户
  • 任务

我正在尝试的查询基本上是:“获取属于该组的所有任务,以及分配给该任务的所有用户”

我在这个项目的几个地方使用了 JOIN 查询,但我对它们的理解是基本的,不幸的是,这与其他人的情况不同。我对 JOIN 查询的尝试似乎几乎可以工作,它看起来像(CI 数据库类格式,但希望无论如何都清楚发生了什么):

$this->db->select('task.name AS taskname, user.name AS username');
$this->db->from('task');
$this->db->from('task_link');
$this->db->where('task.group', $group);
$this->db->join('user', 'user.id = task_link.user');

编辑:为清楚起见,转储为适当的查询:

SELECT `user`.`name` AS username, `task`.`name` AS taskname FROM (`task`, `task_link`) JOIN `user` ON `user`.`id` = `task_link`.`user` WHERE `task`.`group` = '7'"

我已经尝试了上述几乎所有任务、task_link 和用户的组合,并且每次都得到相同的结果。主要问题是:

  • 我得到重复的结果,其中有奇数个 - 我不太清楚分组是什么。我似乎为每个任务获得了 6 个结果,这是目前“链接”的数量。
  • 用户“依附”于任务的方式是不对的;我需要将用户作为任务的一部分作为数组返回(因为每个任务可能有多个用户链接到它);而我似乎只在结果中得到一个用户和多个结果(但不是每个用户的任务)。

如果它有助于理解我的模型,则视图将类似于:

foreach($tasks as $task){
  echo $task->taskname;
  foreach($task->username as $user){
    echo $user;
  }
}

我知道有不同的 JOIN 子句,也许更相关,分组命令 - 但我的大脑开始受伤,我认为我的 mysql 技能已经到了边缘。

有没有人能够帮助上述查询按描述工作?如果我遗漏了一些有用的东西,请告诉我!

4

1 回答 1

1

我猜测 task_link 和 task 是如何相关的,但我认为你想要的基本 SQL 是:

SELECT user.name AS username, task.name AS taskname
FROM task
INNER JOIN task_link ON task.id = task_link.task
INNER JOIN user ON user.id = task_link.user
WHERE task.group = '7'"

我认为这可以转化为:

$this->db->select('task.name AS taskname, user.name AS username');
$this->db->from('task');
$this->db->where('task.group', $group);
$this->db->join('task_link', 'task.id = task_link.task');
$this->db->join('user', 'user.id = task_link.user');
于 2013-10-29T16:35:42.623 回答