0

この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を送信します)。見つかった場合は、2番目のクエリは、そのユーザーマネージャーを見つけ、そのユーザーマネージャーが現在ログインしている場合は、吐き出します。本当の価値。

問題は、現在のところ最初のクエリであり、次のように表示されます。

uid
---
user1
user1
user1
user2
user2
user2

2番目のクエリはuser1マネージャー名のみをチェックします。user2はチェックしません。誰かがこれを修正するのを手伝ってくれるので、すべてのユーザーのマネージャー名をチェックします。

ありがとう

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)

これにより、データベースに2つのリクエストを送信する手間が省けます。

また、次の代わりに、毎回値を上書きしています。

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

あなたは次のようなことをしたいと思うでしょう:

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

2つのテーブル間にJOINを指定して単一のクエリを作成する必要があります。現在、1つの値を探すために2番目のクエリのみを要求しています。

また、句読点はプログラミングと同様に英語でも重要です。必要な場合はアポストロフィを使用してください。それはあなたの質問をはるかに読みやすくします。

于 2013-03-09T18:24:44.323 に答える