1

オンライン学習 Web サイトの場合、教師は自分が教えたい任意のコースを作成できます。各コースにはレッスンがあります。学生は、これらのコース、または希望する場合は教師が追加する将来のコースに登録できます。生徒が教師からのコース

を 購読できる 3 つの方法を以下に示し ますsubscriber_id 12 2.すべてのコースを購読してから、個々のコースの購読を解除します (現在のすべて    の個別コースの購読を解除しても、将来のコースには引き続き購読されます) subscriber_id 10 3.個々のコースのみを購読するex.


サブスクライバー ID 11

subscribed_courses テーブルは次のようになります。

subscribed_courses (Table with all member chosen resort services)
teacher_id  subscriber_id  course_id    sub_type
    4            10            0          all
    4            10            1         unsub
    4            10            2         unsub
    4            11            4          sub
    4            12            0          all

教師が新しいコースまたはレッスンを追加するときは、subscribed_courses テーブルをスキャンして、購読しているどの生徒がメールを受け取る必要があるかを確認する必要があります。問題は、以下のクエリを機能させて、正しいsubscriber_idsを電子メールで取得することです。この特定のクエリの例では、新しいレッスンが追加されたばかりの course_id 2 を使用して、すべての購読者にメールを送信する必要があります。これを達成するためのより良い方法があるはずです:

SELECT DISTINCT subscriber_id 
FROM subscribed_courses
WHERE teacher_id='4'
//AND #1 (sub_type='sub' AND course_id='2') //individually subscribed
      #2 ((sub_type='all' AND course_id='0') AND (sub_type='unsub' AND course_id<>'2')) //subscribed to all, ensure subscriber didn't unsub from this course [all subscribed 1 row + more row(s) for unsub]
      #3 (sub_type='all' AND course_id='0') //all subscribed [if this is one row only for subscriber]

私たちの状況で正しいsubscriber_idsを取得する方法や、より効果的な解決策はありますか?

4

2 に答える 2

0

これが必要なものかどうかを確認してください。ありがとう。

SELECT DISTINCT subscriber_id 
FROM subscribed_courses
WHERE teacher_id='4'
AND ((sub_type='sub' AND course_id='2')
union 
SELECT DISTINCT subscriber_id 
FROM subscribed_courses
WHERE teacher_id='4'
AND ((sub_type='all' AND course_id='0') AND (sub_type='unsub' AND course_id<>'2')) 
union
SELECT DISTINCT subscriber_id 
FROM subscribed_courses
WHERE teacher_id='4'
AND (sub_type='all' AND course_id='0'))
于 2013-06-07T03:12:05.637 に答える