0

我正试图让这个等待提交的功能正常工作。它假设的工作方式是,如果经理登录到他的帐户并且有待审核的时间表,我想向经理发出某种通知,告知有待处理的时间表。

到目前为止,这是我的代码,尽管它仅适用于第一个结果(第一个时间表,没有为所有其他提交的时间表获得经理),如果这令人困惑,我深表歉意。

function pendingsubmissions($loggedInUser) {
        include("table_names.inc");
        global $authenticationManager;

        list($qh, $num) = dbQuery("SELECT uid FROM $TIMES_TABLE WHERE submitstatus=1 OR ot_status=1");
            while ($data = dbResult($qh)) {
                $username = $data['uid'];

        list($qh2,$num2) = dbQuery("SELECT manager FROM $USER_TABLE WHERE username='$username'");
            while ($data2 = dbResult($qh2)) {
                $manager = $data2['manager'];

            if ($loggedInUser == $manager || $authenticationManager->hasClearance(CLEARANCE_ADMINISTRATOR))
                return 1;
            else
                return 0;
            }
        }
    }

第一个查询是检查数据库是否有待处理的时间表(提交状态 1)。如果找到,那么第二个查询是找出用户管理器,然后如果该用户管理器当前已登录,则吐出真正的价值。

问题是到目前为止的第一个查询,它显示如下:

uid
---
user1
user1
user1
user2
user2
user2

第二个查询只检查 user1 manager name.. 不检查 user2.. 有人可以帮助解决这个问题,因此它会检查每个用户的 manager-name

谢谢

4

2 回答 2

1

如前所述,您可以使用DISTINCT, 或GROUP BY诸如uid.

这也可以通过单个查询来实现。就像是:

SELECT manager FROM $USER_TABLE WHERE username IN (SELECT DISTINCT uid FROM $TIMES_TABLE WHERE submitstatus=1 OR ot_status=1)

这样可以节省您向数据库发送两个请求的时间。

您还每次都覆盖您的值,而不是:

        while ($data = dbResult($qh)) {
            $username = $data['uid'];

您将需要执行以下操作:

        $usernames = array();
        while ($data = dbResult($qh)) {
            $usernames[] = $data['uid'];
于 2013-03-09T18:22:50.700 回答
0

您应该在两个表之间编写一个带有 JOIN 的查询。目前您只要求第二个查询查找一个值!

此外,标点符号在英语中与在编程中一样重要。请在需要的地方使用撇号。它使阅读您的问题变得更加容易。

于 2013-03-09T18:24:44.323 回答