挂起的时间表检查功能,2个查询无效

时间:2013-03-09 18:18:22

标签: php mysql sql

我正在尝试让这个pendingsubmission函数正常工作。它假设工作的方式是,如果经理登录到他的帐户并且有未决的时间表进行审核,我希望向经理通知有待处理的时间表。

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

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管理器名称..不检查user2 ..有人可以帮助修复此问题,以便它检查每个用户的manager-name

感谢

2 个答案:

答案 0 :(得分:1)

如前所述,您可以使用DISTINCTGROUP 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'];

答案 1 :(得分:0)

您应该在2个表之间使用JOIN编写单个查询。目前,您只是要求第二个查询查找一个值!

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