PHP - MySQL查询,仅显示用户

时间:2017-06-01 02:58:38

标签: php mysql

晚上好,

我正在尝试从包含用户角色的用户面板中更改一些代码。我希望某些角色能够为他们所在的每个角色显示用户,但某些角色我只想让它们显示一次。

用于此目的的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

1 个答案:

答案 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'];
    }
  }
}