0

編集2をお読みください。

私は「inoffice.php」というページで作業しています。このページには、生徒が表示されるのを待っていて、現在表示されているページが次のように表示されます。

inoffice.phpのページビュー

これで、上から同じテーブルを使用して2番目のテーブルを取得しましたが、左結合を追加して、学生(この場合はDawne)と一緒に作業しているカウンセラーが表示され、学生がカウンセラーに受け入れられた時刻も表示されます。 。

プロジェクトのその部分は非常に困難でしたが、それでも私は通り抜けることができました。今、私にとって難しい部分はこれです(これは私の質問でもあります):

1)カウンセラー(またはスタッフ)が[セッションの開始]ボタン(phpセッションではなく実際の会議)をクリックしない限り、Being Seenテーブル(待機中の2番目のテーブル)が空になるようにするにはどうすればよいですか?学生とカウンセラーの間)

2)カウンセラー(スタッフ)が「セッション開始」ボタンをクリックすると、最初のテーブル(待機中)がエントリーを失うようにするにはどうすればよいですか。

私のデータベーススキーマは次のようになります:

  1. ユーザー-スタッフの資格情報を保持します
  2. 待機中-ID(PK)、anum(学生ID番号)、最初、最後、理由、コメント、サインインタイムが含まれます
  3. カウンセラー-これは、ID(PKおよびFKが結合での使用を待機していないこと)、カウンセラー名、カウンセラーの開始時刻を保持します
  4. コメント-ID(待機中のPKおよびFK)、コメント(カウンセラーのコメントの場合はvarchar 50前後)
  5. 終了-ID(待機中のPKとFK)、およびカウンセラーが学生と一緒に終了したときのタイムスタンプ

うまくいけば、私が提供した情報で、これを達成するためにトリガーまたはトランザクションをどのように/使用する必要があるかについて誰かが詳しく説明することができます。または、それがPHPの「もの」である場合、より良い言葉がないためです。

ありがとう、レイジ

編集2:古い機能していないコードを削除し、新しいコードで投稿を更新し、古いスクリーンショットを削除しました!更新されたものを含みます!:

<php
require('core/init.php');

    if(!isset($_SESSION['LoggedIn'])){
        die("You must <a href='index.php'><bold>login</bold></a> before you can see that page!");
    }

//Begin the select statements
try 
    {
$query = $dbh->prepare("SELECT * FROM waiting WHERE counselorname IS NULL ");
$query->bindParam(':null', $null);
$query->execute();
$result = $query->fetchall();
    }
        catch (PDOException $e) {
        error_log($e->getMessage());
        die($e->getMessage());
        }


    echo "Return to <a href='login_success.php'><bold>Home Page</bold></a>";

echo "<br />";
echo "Waiting";

echo 
    "<table border='2'>
    <tr>
    <th>ID</th>
    <th>A Number</th>
    <th>First Name</th>
    <th>Last Name</th>
    <th>Why</th>
    <th>Comments</th>
    <th>Signintime</th>
    <th>Staff Member</th>
    <th>Click if ready!</th>
    </tr>"
    ;

    foreach($result as $row)
    {
  echo "<tr>";
  echo "<td>" . $row['id'] . "</td>";
  echo "<td><a href=Student.php?student=" . $row['anum'] . ">" .$row['anum'] . " </a></td>";
  echo "<td>" . $row['first'] . "</td>";
  echo "<td>" . $row['last'] . "</td>";
  echo "<td>" . $row['why'] . "</td>";  
  echo "<td>" . $row['comments'] . "</td>";
  echo "<td>" . $row['signintime'] . "</td>";
  echo "
        <td>    <form action='counselor.php?id=" . $row['id'] . "' method='post' target='_new'>
                    <select name='namedrop'>
                        <option value=''>Counselor Name</option> 
                        <option value='Admin-John'>Admin - John</option>
                        <option value='Admin-Christine'>Admin - Christine</option>
                        <option value='Admin-Dawne'>Admin - Dawne</option>
                        <option value='Counselor-Cherie'>Counselor - Cherie</option>
                        <option value='Counselor-Tootie'>Counselor - Tootie</option>
                        <option value='Counselor-Debbie'>Counselor - Debbi</option>
                        <option value='FrontDesk-Delores'>Front Desk - Delores</option>
                        <option value='FrontDesk-Kiana'>Front Desk - Kiana</option>
                    </select>
            </td>

            <td> <input type='submit' name='submit' value='Start Session'></td>
            </form> </td>";
}

  echo "</tr>";
  echo "</table>";

echo "<br />";
echo "<br />";


try 
    {
    $query2 = $dbh->prepare("SELECT * FROM waiting WHERE counselorname is NOT NULL");
    $query2->execute();
    $result2 = $query2->fetchall();
    }
        catch (PDOException $e) {
        error_log($e->getMessage());
        die($e->getMessage());
        }


echo "Return to <a href='login_success.php'><bold>Home Page</bold></a>";

echo "<br />";
echo "Being seen";

echo 
    "<table border='2'>
    <tr>
    <th>ID</th>
    <th>A Number</th>
    <th>First Name</th>
    <th>Last Name</th>
    <th>Why</th>
    <th>Comments</th>
    <th>Signintime</th>
    <th>Staff Member</th>
    <th>Counselor Start Time</th>
    </tr>"
    ;

    foreach($result2 as $row2)
    {
  echo "<tr>";
  echo "<td>" . $row2['id'] . "</td>";
  echo "<td><a href=Student.php?student=" . $row2['anum'] . ">" .$row2['anum'] . " </a></td>";
  echo "<td>" . $row2['first'] . "</td>";
  echo "<td>" . $row2['last'] . "</td>";
  echo "<td>" . $row2['why'] . "</td>"; 
  echo "<td>" . $row2['comments'] . "</td>";
  echo "<td>" . $row2['signintime'] . "</td>";
  echo "<td>" . $row2['counselorname'] . "</td>";
  echo "<td>" . $row2['counselor_time'] . "</td>";
}


?> 

新しいプレビュー

4

1 に答える 1

2

レンダリングされた両方のHTMLテーブルに対して(正規化された依存関係を持つ)1つのSQLテーブルが存在する可能性があります。

つまり、表示されるHTMLテーブルが同じ情報の異なるビューを表すようにします。

現在、投稿されたスキーマはほとんどこれを許可していますが、それを実現できないという問題があります。

カウンセラーテーブルにはstart time、機能従属性ではない情報()が含まれています。つまり、「カウンセラーであること」とは関係ありません。これにより、2つの問題が発生します。

  1. カウンセラーは1つだけ持つことができstart timeます;
  2. start timeすべてのイベントを表すことはできません。

修正は、列をカウンセラーテーブルから移動し、 (時間のように)特定のスケジュールに依存するためstart time、スケジュールテーブルに配置することです。start timefinish


1)カウンセラー(またはスタッフ)が[セッションの開始]ボタン(phpセッションではなく実際の会議)をクリックしない限り、Being Seenテーブル(待機中の2番目のテーブル)が空になるようにするにはどうすればよいですか?学生とカウンセラーの間)

クエリ(情報の表示):

select * from Schedules
where startTime not null   -- only show started events

2)カウンセラー(スタッフ)が「セッション開始」ボタンをクリックすると、最初のテーブル(待機中)がエントリーを失うようにするにはどうすればよいですか。

クエリ(情報の表示):

select * from Schedules
where startTime is null    -- it does not 'lose' item, but it is not shown

それ以外の場合、個別のテーブルを使用する必要がある場合は、簿記を行う必要があります。必要に応じて毎回手動で挿入/削除するか、同じことを行うトリガーを設定します。これにより追加の作業が追加され、おそらく必要ありません。

于 2013-01-02T18:49:41.607 に答える