Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为多对多关系创建联接_Php_Sql_Codeigniter - Fatal编程技术网

Php 为多对多关系创建联接

Php 为多对多关系创建联接,php,sql,codeigniter,Php,Sql,Codeigniter,我无法理解JOIN和多对多数据库关系 我有3张表(结构已简化) 用户: id (primary) | userEmail | userName | userAddress | userCreated id (primary) | teamName | teamLogo | teamCreated 团队: id (primary) | userEmail | userName |

我无法理解JOIN和多对多数据库关系

我有3张表(结构已简化)

用户:

id (primary)    |    userEmail    |    userName    |    userAddress    |    userCreated
id (primary)    |    teamName    |    teamLogo    |    teamCreated
团队:

id (primary)    |    userEmail    |    userName    |    userAddress    |    userCreated
id (primary)    |    teamName    |    teamLogo    |    teamCreated
团队-用户

id (primary)    |    userId    |    teamId    |   userLevel
团队可以有很多用户。用户可以在许多团队中。UsersTeams表跟踪哪些用户在哪些团队中(注意:我没有使用外键或任何东西)

当用户登录时,我希望获得他们所属的所有团队的列表以及相应的数据,即

  • 从用户处获取数据(其中id=$id)
  • 在TEAMS-USERS中查找它
  • 通过TEAMS-USERS中的teamID从团队获取团队信息
  • 将其全部存储在一个数组中
到目前为止,我已经有了这段代码,但老实说,我只是尝试了很多变体:

    $model->select('users.*, teams.*, teams.id as teamId, teams-users.id as teamsUsersId, teams-users.userId as teamsUsersUserId, teams-users.teamId as teamsUsersTeamId');
    $model->where("users.id", $id);
    $model->join('teams-users','teams.id = teams-users.teamId','inner');

    $data = $model->get()->getRowArray();
运行上面的查询会出现错误:未知表“myproject.teams”——即使teams表100%存在,并且我在整个项目中都使用它


我哪里出错了?

您会遇到此错误,因为在查询中没有包含from子句,并且缺少join子句。使用codeigniter,您可以这样做:

$model->select('users.*, teams.*, teams.id as teamId, teams-users.id as teamsUsersId, teams-users.userId as teamsUsersUserId, teams-users.teamId as teamsUsersTeamId');
//$model->where("users.id", $id);
$model->join('teams-users','teams.id = teams-users.teamId','left');
$model->join('users','user.id = teams-users.userId  and users.id='.$id,'left');
$data = $model->get('teams')->getRowArray();
说明:

  • 缺少表用户的联接
  • 要使用左连接吗
  • 将where子句放在相应的联接中(它变成
  • 您错过了from部分,可以将表名放入 get()函数或通过
    $model->from('teams')

另请参见此

由于查询中未包含from子句且缺少join子句,因此出现此错误。使用codeigniter,您可以这样做:

$model->select('users.*, teams.*, teams.id as teamId, teams-users.id as teamsUsersId, teams-users.userId as teamsUsersUserId, teams-users.teamId as teamsUsersTeamId');
//$model->where("users.id", $id);
$model->join('teams-users','teams.id = teams-users.teamId','left');
$model->join('users','user.id = teams-users.userId  and users.id='.$id,'left');
$data = $model->get('teams')->getRowArray();
说明:

  • 缺少表用户的联接
  • 要使用左连接吗
  • 将where子句放在相应的联接中(它变成
  • 您错过了from部分,可以将表名放入 get()函数或通过
    $model->from('teams')

另请参见此

如果您两次加入同一个表。。。每个表都需要自己的唯一别名,否则数据库无法区分它们。请两次加入同一个表。。。每个都需要自己唯一的别名,否则数据库无法区分它们。.谢谢@Vickel。我不得不从
get()
中删除'teams',并添加一个from子句(teams),但它可以工作。有点。它应该返回2行。但是,它返回5行(这2个匹配只是重复).5也是我的引用表teams users中的行数。发生这种情况的原因是什么?实际上,不是,它只是列出了team users表中的所有行。where语句被忽略了Hanks@Vickel。我必须从
get()
中删除“teams”,并添加from子句(teams),但它可以工作。某种程度上。它应该返回2行。但是,它返回5(这两个匹配刚刚重复)。5也是我的参考表teams users中的行数。有什么原因会发生这种情况吗?实际上,没有,它只是列出了TeamUsers表中的所有行。正在忽略where语句