繁体   English   中英

在MySQL中查询此问题的最有效方法

[英]Most efficient way to query this in MySQL

我有一组权限组,例如Admin,Moderator等...我想查询SQL数据库并检索具有这些组的人数...这是我的代码:

$groups = $this->getGroupsUsingPermission("sabre.access");
foreach($groups as $g) {
    $command = "SELECT COUNT(PERMISSION_GROUP) FROM users 
                WHERE PERMISSION_GROUP='".$g."';";
    $query = mysqli_query($this->connection, $command) or die (mysqli_error()); 
    $amountOfStaff = $amountOfStaff + mysqli_fetch_row($query)[0];
}

除了反复查询数据库之外,还有其他更好的方法吗?

更新:

我的意思是这样的:

groups:
    member:
        permissions:
            - sabre.access
    admin
        permissions:
            - sabre.admin
        inheritance:
            - member

现在,我将进行继承工作。 它返回一个类似的数组:

member, admin (any other groups which have access to 'sabre.access' etc...)

所以当我像这样设置某人的组时:

ID, USERNAME, PERMISSION_GROUP
 1    KraZ         Owner

我想计算数组中有任何一组的每个人,明白吗?

使用MySQL的IN()一次搜索所有组:

$groups = $this->getGroupsUsingPermission("sabre.access");
$group_ids = implode("','", $groups)
$command = "SELECT COUNT(PERMISSION_GROUP) FROM users WHERE PERMISSION_GROUP IN('".$group_ids."');";
$query = mysqli_query($this->connection, $command) or die (mysqli_error()); 
$amountOfStaff = $amountOfStaff + mysqli_fetch_row($query)[0];

在这里,我使用implode()获取组ID,并使它们成为逗号分隔的字符串。 然后,我将值传递给IN() 您也可以在此处使用FIND_IN_SET()

$groups = $this->getGroupsUsingPermission("sabre.access");
$group_ids = implode(',', $groups)
$command = "SELECT COUNT(PERMISSION_GROUP) FROM users WHERE FIND_IN_SET(PERMISSION_GROUP, '".$group_ids."');";
$query = mysqli_query($this->connection, $command) or die (mysqli_error()); 
$amountOfStaff = $amountOfStaff + mysqli_fetch_row($query)[0];

您是否不希望每个组中的用户数?

    $groups = $this->getGroupsUsingPermission("sabre.access");
    $group_ids = implode(',', $groups)
    $command = "SELECT PERMISSION_GROUP, COUNT(*) userCount FROM users 
                WHERE PERMISSION_GROUP IN (".$group_ids.")
                Group By PERMISSION_GROUP";
    $query = mysqli_query($this->connection, $command) or die (mysqli_error()); 
    $amountOfStaff = $amountOfStaff + mysqli_fetch_row($query)[0];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM