我被一个似乎很难理解的问题难住了。我有这些表格,例如:
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
选择所有组及其成员,并且仅当我是的成员时。我在看工会,但似乎是不正确的。你知道吗?谢谢
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>' } }
显示所有内容
1条答案
按热度按时间lkaoscv71#
如果我理解正确,您希望编写一个函数
如果给定一个id,则返回将该id作为其成员之一的所有组。
您的表“groups”包含{groupid,groupname}的对(没有一个是不同的),并且“groups\u members”应该是一个Map表{groupid(外键),userid(外键)}(我不知道为什么您在那里还有一个额外的id)。
这里我必须指出,使用完全联接可以更容易地完成以下操作,但由于它们不是直接在mysql中实现的,因此我将使用两个查询来完成:
$查询1:
$查询2:
请注意,如果有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。
现在,$namemap正在将所有组idMap到名称。
创建临时数组
现在,在这个关联数组中,将其成员数组存储在组名索引处:
最后,对于每个组,如果其名称是“groupname”,则应该在$temparr[“groupname”]处有一个包含所有用户的数组。
现在,你可能想跑一些像
显示所有内容