在MySQL和PHP中使用聚合字符串函数

时间:2019-05-22 05:00:41

标签: php mysql sql session aggregate

我当前遇到一个问题,我有一个名为“特权”的枚举,其中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

感谢您的帮助。

1 个答案:

答案 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特权或privilegedif($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" } ] } ,因为从查询返回的值将是字符串,而不是整数。