我被阻止查询似乎很难理解。
我有这些表格,例如:
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
选择所有群组及其成员,并且仅在我是其成员的情况下。
我正在寻找联盟,但似乎没有问题。
有什么想法吗?
由于
答案 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>'
}
}
全部显示