How can a many-to-many relationship between permissions and user groups be effectively managed in a PHP application using SQL queries?

Managing a many-to-many relationship between permissions and user groups in a PHP application involves creating a pivot table to store the relationships between the two entities. This pivot table will have columns for permission_id and group_id, allowing for a many-to-many relationship to be established. SQL queries can then be used to retrieve permissions for a specific user group or user groups for a specific permission.

// Retrieve permissions for a specific user group
$userGroupId = 1;
$sql = "SELECT p.* FROM permissions p
        JOIN group_permissions gp ON p.id = gp.permission_id
        WHERE gp.group_id = :group_id";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':group_id', $userGroupId);
$stmt->execute();
$permissions = $stmt->fetchAll(PDO::FETCH_ASSOC);

// Retrieve user groups for a specific permission
$permissionId = 1;
$sql = "SELECT g.* FROM user_groups g
        JOIN group_permissions gp ON g.id = gp.group_id
        WHERE gp.permission_id = :permission_id";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':permission_id', $permissionId);
$stmt->execute();
$userGroups = $stmt->fetchAll(PDO::FETCH_ASSOC);