2017-02-22 103 views
0

我有以下表格:获取关系表数据

member 
id, firstName, lastName 

team 
id, name 

teamMember 
id, teamId, memberId 

我试图访问关系表,所以我可以输出的成员名字和姓氏:

$sql = "SELECT member.id, member.firstName, member.lastName, team.id, teamMember.id, teamMember.memberId, teamMember.teamId 
     FROM teamMember 
     JOIN member 
     JOIN team 
     ON teamMember.memberId = member.id 
     WHERE dashboardId = 1 AND team.id = 1"; 

我已经设置了硬在team.id中的价值,所以我可以测试以确保它现在返回团队1的成员。

所以这里的最终目标是我需要访问关系表,以便通过ID返回与选择查询中设置的团队ID关联的成员的名称。

我很努力地获得输出需求。

和返回值,像这样:

$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    while($row = $result->fetch_assoc()) { 
     echo "{$row['firstName']} {$row['lastName']}<br>"; 
    } 
} 

我看到的错误是:

Notice: Trying to get property of non-object in 

其中提到:if ($result->num_rows > 0) {

我想看到的输出是会员firstNamelastName来自member

+0

请提及你得到什么,你期待什么输出。 –

+0

@ParantapParashar我已经包含了一些更多的信息。 – PhpDude

+0

您是否尝试在'$ result'上运行var转储来查看您的查询是否正确输出? – Option

回答

1

您可能希望将所有结果或行与所需的团队ID相关联。但是,使用INNER JOIN,您只会为一个团队获得单行,因为这是JOIN的工作原理。

相反,你应该使用这样的查询:

SELECT member.id, member.firstName, member.lastName, team.id, teamMember.id, teamMember.memberId, teamMember.teamId 
     FROM teamMember 
     JOIN member 
     ON teamMember.memberId = member.id 
     WHERE dashboardId = 1 AND teamMember.teamId = 1" 

希望这会工作。

但是,作为bool(false),您的查询也被打破,并不会得到您想要的结果。 在您的查询中,您已经加入了三个表格并且仅为其中一个定义了条件。这将是你的查询应该看起来像

"SELECT member.id, member.firstName, member.lastName, team.id, teamMember.id, teamMember.memberId, teamMember.teamId 
     FROM teamMember 
     JOIN member 
     ON teamMember.memberId = member.id 
     JOIN team 
     ON teamMember.teamId= team.id 
     WHERE dashboardId = 1 AND team.id = 1"; 
+0

这似乎并没有解决这个问题,我仍然支持$结果 – PhpDude

+0

bool(false)这是因为你没有在任何表中的dashboardId。所以你应该从查询中删除它。 –

+0

我已经完成了测试目的 – PhpDude