选择我所属的所有组,并显示这些组的成员

时间:2018-05-06 18:26:14

标签: mysql select

我被阻止查询似乎很难理解。

我有这些表格,例如:

groups (id, name)
groups_members (id, userid, groupid)

我想展示类似的内容:

Group 1
Member 1
Member 3
Member 4
Member 5

Group 4
Member 1
Member 2
Member 9

选择所有群组及其成员,并且仅在我是其成员的情况下。

我正在寻找联盟,但似乎没有问题。

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你希望写一个像

这样的函数
function selectIfMember($ID)

给定一个ID,返回具有该ID作为其成员之一的所有组。

您的表“groups”包含{组ID,组名}和“groups_members”的对(其中没有一个是不同的),应该是映射表{Group ID(外键),用户ID(外键) (我不知道你为什么还有一个额外的ID)。

我必须注意,使用完全连接可以更轻松地完成以下操作,但由于它们不是直接在mySQL中实现,我将使用两个查询来执行此操作:

$ QUERY1:

SELECT GM.groupid, GM.userid FROM groups_members GM
WHERE GM.userid = '.$ID

$ QUERY2:

SELECT * FROM groups 

注意,如果有n个组,则Query2现在是[n] [2]数组,其中对于第i个组,[i-1] [0]是组ID和[i-1] [ 1]是它的名字 如果有m个用户,则查询1是[m] [2]数组,其中第i个用户[i-1] [0]是该用户的组ID,[i-1] [1]是该用户的ID。

foreach($query2 as $value){
    $nameMap[$value[0]] = $value[1];
}

现在,$ nameMap将所有组ID映射到名称 创建一个临时数组

$tempArr =  array();

现在,在这个关联数组中,存储在索引中,该索引是组的名称,是其成员的数组:

foreach($query1 as $val){
  if(!isset($tempArr[$nameMap[$val[0]]]))
      $tempArr[$nameMap[$val[0]]] = array();
  array_push($tempArr[$nameMap[$val[0]]],$val[1]);
}

最后,对于每个组,如果其名称为“groupName”,则应该在$ tempArr [“groupName”]中拥有其所有用户的数组。
现在,你可能想要运行像

这样的东西
foreach($tempArr as $key => $val){
  echo '<h1>'.$key.'<h1><br>'
      foreach($val as $user){
      echo $user.'<br>'
      }
}  

全部显示