晚上好,
我正在尝试从包含用户角色的用户面板中更改一些代码。我希望某些角色能够为他们所在的每个角色显示用户,但某些角色我只想让它们显示一次。
用于此目的的MySQL表是:
id | username | password | displaygroup | usergroups
1 | User A | Pass A | 2 | 1,2,3
2 | User B | Pass B | 5 | 1,2,3,4,5
例如,如果用户A在第1,2和3组中,则对于他们所属的每个组,应将其列出三次。一旦用户处于较高的组中,例如用户B,我只希望它们在最高组中显示一次。
正在使用的旧查询是:
$query = $db->query("SELECT * FROM users WHERE displaygroup = '2' ORDER BY id");
while ($array = $db->assoc($query)) {
echo $array['username'];
}
使用该查询,用户A只会显示一次。
我尝试了以下内容:
$query = $db->query("SELECT * FROM users ORDER BY id");
while ($array = $db->assoc($query)) {
$role = explode(',', $array['usergroups']);
foreach ($role as $value) {
if ($value == 1) {
echo $array['username'];
}
if ($value == 2) {
echo $array['username'];
}
}
}
通过上述内容,它对用户A完全正常,因为它显示了他们所在的组1,2和3。
但是,用户B现在正在出现,因为他们也是这些角色。
如何获取,以便用户A继续显示第1,2和3组,而用户B仅显示第5组?
更新
我的问题似乎有些混乱。我非常希望它能做到:
第1组
用户A
第2组
用户A
第3组
用户A
第4组
第5组
用户B
答案 0 :(得分:2)
您可以反转role
数组并检查最后一个值。如果存在更高的值5
,请执行操作并中断循环。
$query = $db->query("SELECT * FROM users ORDER BY id");
while ($array = $db->assoc($query)) {
$role = explode(',', $array['usergroups']);
$role = array_reverse($role);
foreach ($role as $value) {
if($value == 5) {
echo $array['username'];
break;
}
if ($value == 1) {
echo $array['username'];
}
if ($value == 2) {
echo $array['username'];
}
}
}