晚上好,
我正在尝试修改用户面板中的一些代码,其中包括用户角色。我希望某些角色为他们所处的每个角色显示用户,但某些角色我只希望它们显示一次。
用于此的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
发布于 2017-06-01 03:14:30
您可以反转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'];
}
}
}
https://stackoverflow.com/questions/44297779
复制相似问题