我正在尝试让这个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
感谢
答案 0 :(得分: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'];
答案 1 :(得分:0)
您应该在2个表之间使用JOIN编写单个查询。目前,您只是要求第二个查询查找一个值!
此外,标点符号在英语中与在编程中一样重要。请在需要的地方使用撇号。这使得阅读问题变得更加容易。