为多对多关系创建JOIN

问题描述 投票:1回答:1

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

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

USERS:

id (primary)    |    userEmail    |    userName    |    userAddress    |    userCreated

TEAMS:

id (primary)    |    teamName    |    teamLogo    |    teamCreated

TEAMS-USERS

id (primary)    |    userId    |    teamId    |   userLevel

团队可以有许多用户。用户可以在许多团队中。 UsersTeams表跟踪哪些用户属于哪个团队(请注意:我没有使用外键或任何东西)。

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

  • 从USERS获取数据(其中id = $ id)
  • 在TEAMS用户中查找
  • [通过TEAMS-USERS中的teamID从TEAMS获取团队信息
  • 全部存储在一个数组中

到目前为止,我已经有了这段代码,但老实说,我只是在尝试很多变化:

    $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%存在并且我在整个项目中都使用它。

我要去哪里错了?

php sql codeigniter
1个回答
0
投票

您会收到此错误,因为在您的查询中没有包括from子句。使用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','inner');

$data = $model->get('teams')->getRowArray();

或替代地

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

$data = $model->get()->getRowArray();
© www.soinside.com 2019 - 2024. All rights reserved.