通过SQL JOINS从每个团队中获取成员

时间:2017-01-15 16:42:59

标签: mysql

我有3张桌子,<div class="checkbox_option2">members&amp; teams

team_members容纳team_members&amp; members并按行存储。

teams表的架构:

enter image description here

team_members表:

我希望能够做的是创建一个联接,我可以从teams表中输出team_name,然后显示与该teams相关联的members_firstname那个团队。例如:

Team 1
joe bloggs
jon doe

Team 2
charlie chaplin
hulk hogan

我的php代码如下所示:

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$sql = "SELECT t.team_name, group_concat(m.firstName) 
        FROM members AS m
        JOIN team_members AS tm
        ON tm.member_id = m.member_id 
        JOIN teams as t
        on t.team_id = tm.team_id
        GROUP BY t.teamname"; 

$result = $conn->query($sql);
    if($result->num_rows > 0){
        while($row = $result->fetch_assoc()){
            echo $row["member_id"] . '<br>';
            echo $row["team_id"] . '<br><br>';      
        }
    }
?>

现在我明白了:

注意:尝试在第30行获取非对象的属性,即:

if($result->num_rows > 0){

2 个答案:

答案 0 :(得分:1)

你应该使用两个连接来拼凑三个表。

SELECT t.team_name as team_name, group_concat(m.firstName) as team_members 
FROM members AS m
JOIN team_members AS tm
ON tm.member_id = m.member_id 
JOIN teams as t
on t.team_id = tm.team_id
GROUP BY t.team_name

然后,您应该在尝试使用之前检查query的状态。

if(!$result = $conn->query($sql)) {
     die(printf("Errormessage: %s\n", $conn->error));
}

然后遍历结果,并用逗号分割分组值。

while($row = $result->fetch_assoc()){
      echo $row["team_name"] . '<br>';
      $names = explode(',', $row['team_members']);
      foreach($names as $name) {
           echo $name . '<br>';
       }
       echo '<br>';      
}

您还可以使用<br>作为group_concat中的分隔符。您可以在此处详细了解该功能http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat。如果您这样做,则可以删除foreachexplode,因为$row['team_members']将使用每个成员的换行符构建。

答案 1 :(得分:0)

在PHP中执行此操作的简单方法是使用两个嵌套循环的宽度,首先在团队表中打印并在第二个打印它,然后打印所有播放宽度的团队ID ...

类似的东西:

 do{
      echo $row_team;

      do{
           echo $row_playa;
      }while($row_plya = mysql_fetch_assoc($playas));    // whear pleya.team_id = $row_team.id

 }while($row_team = mysql_fetch_assoc($teams));