我目前遇到一个问题,我有一个名为“特权”的枚举,其中0 =普通,1 =特权。这些被分配给例如工人具有普通特权,但首席执行官具有管理员特权。我遇到的一个问题是用户可能有两个作业,其中一个具有普通特权,而另一个具有管理员特权。我写了一个查询,为了根据特权启动会话,但是当我使用Staff ID分组时,我不确定如何按最高特权分组(情况是1)。例如。else if ($pwdCheck == True){ session_start(); $query = mysqli_query($conn, 'SELECT staff.StaffID, role.Privilege FROM jobs INNER JOIN staff ON staff.StaffID = jobs.StaffID INNER JOIN role ON role.RoleID = jobs.RoleID GROUP BY StaffID '); $gettier = mysqli_fetch_assoc($query); if($gettier["Privilege"] === 'normal'){ $_SESSION['userID'] = $row['LoginID']; header("Location: staffindex.php?login=USERsuccess"); } elseif($gettier["Privilege"] === 'privileged'){ $_SESSION['AdminID'] = $row['LoginID']; header("Location: staffindex.php?login=ADMINsuccess"); } exit();}在所有情况下,这都是我输入特权人员的地方,仍然使用USERsuccess标头重定向。我假设我将需要使用聚合字符串函数(经过一些研究),但是我并不真正了解如何应用它。请查看图片以查看实际查询:与分组依据:https://imgur.com/ADT0aHF没有分组依据:https://imgur.com/UDeyKe5任何帮助表示赞赏。 最佳答案 不幸的是,MySQL不会对enum值进行数字排序,而是对它们的字符串表示形式进行排序,否则,您可以直接在值上使用MAX。但是您可以通过CAST将值作为整数进行排序,例如SELECT staff.StaffID, MAX(CAST(role.Privilege AS UNSIGNED)) AS Privilege FROM jobsINNER JOIN staff ON staff.StaffID = jobs.StaffIDINNER JOIN role ON role.RoleID = jobs.RoleID GROUP BY StaffID假设您的ENUM具有值('normal', 'privileged'),这将为仅具有1特权的用户返回normal的值,为仅具有2特权或同时具有privileged和。然后,您可以将PHP中的检查更改为:if($gettier["Privilege"] == 1){ $_SESSION['userID'] = $row['LoginID']; header("Location: staffindex.php?login=USERsuccess");}elseif($gettier["Privilege"] == 2){ $_SESSION['AdminID'] = $row['LoginID']; header("Location: staffindex.php?login=ADMINsuccess");}请注意,在与normal的比较中不能使用privileged,因为从查询返回的值将是字符串,而不是整数。
09-03 21:37