-1

ここに画像の説明を入力 添付のスクリーンショットを確認してください。赤い線の上の画像は、ユーザーがサインアップしたトレーニング クラスの概要を示しています。

その画像で特に興味深いのは、 と呼ばれる列ヘッダーAvailableです。

ユーザーがトレーニングにサインアップするたびに、その数は 1 ずつ減少します。

例えば、現在の空席は画像の通り29席。ユーザーがこのクラスにサインアップすると、数が 1 減って 28 になります。

これはこれまでのところうまくいきます。

ユーザーが何らかの理由でサインアップしたクラスを受講できないと判断した場合、ユーザーはCancel Trainingボタンをクリックして、下の画像に示すようにリストからそのクラスを削除する必要があります。読み取り行。

これが発生すると、座席が解放されます。

これもうまくいきます。

私たちがやりたいことは、赤い線の上の画像のリストにその座席を追加することです.

したがって、Available座席が 28 で、ユーザーが座席をキャンセルした場合、その座席を元に戻したいので、1 から 29 に増加します。

何が間違っているのかわかりませんが、以下のコードは、28 席を示すレコードではなく、すべての席を表示します。

Insert into tblTrainings (availableSeats)
select (t.availableseats+1)availableseats
from   tblTrainings t Inner Join tblCourses c on t.courseId = c.courseId  
       Inner Join tblLocations l on t.locationId = l.LocationId  
       Inner Join tblTrainingDates d on c.dateid=d.dateid  
       Inner Join tblCourseInstructor ic on c.courseId = ic.CourseId  
       Inner Join tblInstructors i on ic.instructorId = i.instructorId
where t.locationid=2;
DELETE FROM tblTrainings WHERE trainingId = @trainingid and username = @uchide" 

デザインについて少しだけ。

次のルックアップ テーブルがあります。

tblLocations、tblCourses、tblInstructors、tblCourseInstructor、tblTrainingDates

4

1 に答える 1

0

チャットから、AvailableSeats を DB に保存する必要のないソリューションが必要だとおっしゃいました。

この問題には 2 つの一般的な解決策があります。1つは、スケーラビリティの問題があるため、コーディングが非常に簡単です。もう 1 つはもう少し複雑ですが、Web サイトに合わせて調整できます。

最初の解決策の手順:

  • 各ユーザーのコース ID を格納するユーザー テーブルに変数列を追加します。
  • コースの登録/削除時に各ユーザーのコース ID を追加/削除する単純な UPDATE クエリを作成します。
  • 利用可能な座席を自動的に追跡するには、2 つのクエリがあります
    • コース テーブルから MaxSeats を収集するもの
    • もう 1 つは、ユーザー テーブル内のすべてのユーザーにクエリを実行し、コース ID フィールドに選択したコース ID を持つすべてのユーザーをカウントします。

UPDATE の基本を理解している限り、これを実装する SELECT クエリは、正しい DB 構造が与えられれば非常に簡単です。

注: これにはスケーラビリティの問題があります。大量のユーザーを取得すると、コース ID をすべてのユーザーから検索する必要があるためです。また、ロード時間はユーザー数に応じて増加します。

2 番目の解決策の手順:

  • ユーザーIDの配列を表す文字列を保持するコーステーブルに変数列を追加します
  • 配列文字列を分解、処理、編集、および再構築できるコードを実装する
  • その配列内のユーザー数を maxSeats 値から差し引くコードを実装します。

注: このソリューションでもバックエンドで単純な UPDATE クエリを使用していますが、配列構造を管理するための追跡システムを作成するプロセスは非常に面倒です。

多くのユーザーは、3 番目のソリューションは最初のソリューションに似ていると考えるでしょうが、ユーザーがコースを登録/削除するたびに、使用可能なシートと 1 ずつ増加/減少する列をコース テーブルに追加することもできます。

これは技術的にはうまくいくかもしれません。しかし、DB バックエンドで余分なスペースを不必要に使用しているため、非効率的です。誰がコースに参加しているかを知るために、各ユーザーに関連付けられたコース ID が必要なため、これは不要です。それだけで、残りの座席数を把握できます(AvailableSeats = MaxSeats - NumPeopleEnrolled)

于 2013-06-10T17:09:07.713 に答える