我当前遇到一个问题,我有一个名为“特权”的枚举,其中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
感谢您的帮助。
答案 0 :(得分:1)
不幸的是,MySQL不会对enum
值进行数字排序,而是通过其字符串表示形式进行排序,否则,您可以直接在这些值上使用MAX
。但是您可以通过CAST
将值作为整数进行排序,例如
SELECT staff.StaffID, MAX(CAST(role.Privilege AS UNSIGNED)) AS Privilege FROM jobs
INNER JOIN staff ON staff.StaffID = jobs.StaffID
INNER JOIN role ON role.RoleID = jobs.RoleID GROUP BY StaffID
假设您的ENUM
的值是('normal', 'privileged')
,那么对于只有1
特权的用户,该值将返回normal
;对于具有2
的用户,该值将返回privileged
normal
特权或privileged
和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");
}
两者。然后,您可以将PHP中的检查更改为:
===
请注意,在与$gettier["Privilege"]
的比较中不能使用json data
{
"lastBuildDate": "Wed, 22 May 2019 13:13:34 +0900",
"total": 1,
"start": 1,
"display": 1,
"items": [
{
"title": "Booktitle",
"link": "http://book.naver.com/bookdb/book_detail.php?bid=14027973",
"image": "https://bookthumb-phinf.pstatic.net/cover/140/279/14027973.jpg?type=m1&udate=20190427",
"author": "Authorname",
"price": "15800",
"discount": "14220",
"publisher": "Publishername",
"pubdate": "20181010",
"isbn": "8965746663 <b>9788965746669</b>",
"description": "discriptions"
}
]
}
,因为从查询返回的值将是字符串,而不是整数。