加入3个MySQL表时遇到问题,从两个表中检索数据(CodeIgniter)

时间:2013-10-29 16:21:46

标签: php mysql codeigniter

我有一个像这样的结构的数据库(为简洁起见,简化了):

用户

  • ID
  • 名称

任务

  • ID
  • 名称

TASK_LINK

  • 用户
  • 任务

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

我在这个项目的几个地方使用过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技能的优势。

是否有人能够帮助上述查询按照描述工作?如果我省略了一些有用的东西,请告诉我!

1 个答案:

答案 0 :(得分: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');