制定一个mysqli查询,列出具有单独表的组,该表用于确定用户是否有权访问视图组


formulating a mysqli query that lists out groups that has a separate table for whether user has access to view group

我知道如何处理多个查询;然而,我在这里要求提高我的知识,看看这是否可以在一个查询中完成。

<select name="group-select" class="group-select">';
$groupslist = $con->query("SELECT * FROM groups ORDER BY sort_order ASC");
while($group = $groupslist->fetch_assoc()){
echo '<option value="'. $group['id'] .'" ';
if ($viewGroup == $group['id']) { echo 'selected'; }
echo '>'. $group['name'] .'</option>';
}
echo '</select>

现在,上面是我查询的一个组列表。这将为每个组创建一个新的下拉选项。


现在,我正在创建添加有权查看每个组的用户的功能。如果用户有权查看组,那么我希望该组显示在下拉列表中。如果他们不这样做,我不希望它出现。因此,我创建了一个单独的表(groupaccess),它有3列(AI id、group、user),每当用户添加到组中时,都会在其中添加组id和用户id。这将允许用户查看组。

这里有一个问题:在users表中,有一个名为"viewall"的列,如果this=1,则用户可以查看所有组,并且不必在组访问表中列出这些组。这是为了让管理员不必手动添加到创建的每个组中。

我意识到我可以在上面列出的当前while循环中创建多个查询和while循环,以搜索最先被拉入while循环的登录用户和组;但是,是否可以只添加到当前查询中。我只是想创建更少的查询,尤其是因为组列表可能会有点长。

My goal: Create 1 to 2 queries (preferably 1) that accomplishes...
  - Builds a list of groups from the `groups` table where...
       a) users who have groups.viewall set to 1 can view all groups
       b) users who have been added to view group in groupaccess table.

如果您需要任何其他信息,请告诉我。提前感谢您的帮助。在尝试这项操作的同时,我正在努力提高创建查询的知识。欢迎提出任何建议。

$groupslist=$con->query("选择groups.id,groups.name from groups,groupaccess,users.id={userid=}AND(users.viewall=1 OR({userid=groupaccess.user AND groups.id=groupaccess.group))group BY groups.id ORDER BY groups.sort_ORDER ASC");