php - 有 2 个查询的待处理时间表检查功能不起作用

标签 php mysql sql

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

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

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)。如果找到任何时间表,则第二个查询是找出该用户经理,然后该用户经理当前是否已登录,吐出真正的值(value)。

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

uid
---
user1
user1
user1
user2
user2
user2

第二个查询仅检查 user1 经理名称。不检查 user2。有人可以帮助解决此问题,以便它检查每个用户的经理名称

谢谢

最佳答案

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

关于php - 有 2 个查询的待处理时间表检查功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15314215/

相关文章:

php - 获取laravel中带有特定标签的所有数据

javascript - 在 php 中使用 Ajax 传递复选框值的(动态)列表

php - PHPExcel-锁定正在查看的文件

Mysql Mac OS X 如何在本地机器上不需要密码

mysql - SQL查询以获取下一个 token 号

mysql - MariaDB 使用通配符主机授予权限不起作用

sql - 如何过滤此 MySQL 查询以仅包含特定用户未评级的项目?

mysql - 选择计数行并在 mysql 中的同一查询中计数?

php - 如何自动删除数据库中存在一个月的mysql记录

php - 选择不在表中的值