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

nr9pn0ug  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(290)

我被一个似乎很难理解的问题难住了。
我有这些表格,例如:

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

选择所有组及其成员,并且仅当我是的成员时。
我在看工会,但似乎是不正确的。
你知道吗?
谢谢

lkaoscv7

lkaoscv71#

如果我理解正确,您希望编写一个函数

function selectIfMember($ID)

如果给定一个id,则返回将该id作为其成员之一的所有组。
您的表“groups”包含{groupid,groupname}的对(没有一个是不同的),并且“groups\u members”应该是一个Map表{groupid(外键),userid(外键)}(我不知道为什么您在那里还有一个额外的id)。
这里我必须指出,使用完全联接可以更容易地完成以下操作,但由于它们不是直接在mysql中实现的,因此我将使用两个查询来完成:
$查询1:

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

$查询2:

SELECT * FROM groups

请注意,如果有n个组,则query2现在是一个[n][2]数组,其中对于第i个组,[i-1][0]是组id,[i-1][1]是其名称。
如果有m个用户,查询1是一个[m][2]数组,其中第i个用户的组id是[i-1][0],[i-1][1]是该用户的id。

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

现在,$namemap正在将所有组idMap到名称。
创建临时数组

$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>'
      }
}

显示所有内容

相关问题