SQL查询主题前提条件

时间:2019-03-23 04:21:20

标签: mysql sql database vb.net phpmyadmin

对不起,我又问了一个问题,因为我的上一个问题太令人困惑了。

编辑:我当前的查询

UPDATE student_subject 
  JOIN subject_bsit
    ON subject_bsit.subject_id = student_subject.sub_id
   SET enrolled = 1 
 where student_subject.student_id = 1235 
   and student_subject.sub_id = 1

我想发生的是。

Student_id = 1235 正在尝试注册 subject_id = 5 ,因此该陈述一定不会发生,因为 subject_id = 5 具有的先决条件> subject_id = 1 或编程1

但是,如果 student_subject 子ID 1和Enrolled = 1中的示例表示学生已完成编程并已经注册,则 student = 1235 现在可以注册subjectid = 5

我不知道如何执行此查询。非常感谢。

THIS IS THE TABLE

    "student"

    -----------------------
    |studentID | FullName |
    -----------------------
    |1234      | John    |
    |1235      | Michael |
    |1236      | Bryce   |

"subject_bsit"

    -----------------------------------------
    |subject_id| subject_name  |  pre_id    |
    -----------------------------------------
    |    1     | Programming 1 |    0     |
    |    2     | Networking    |    0     |
    |    3     | Algorithm     |    0     |
    |    4     | Physical Educ |    0     |
    |    5     | Programming 2 |     1       |

This is the Junction table to connect the 
    two now.

"student_subject"

    ------------------------------------------------
    | student_id | subject_id | Grade   | Enrolled |
    ------------------------------------------------
    |   1235     |      1     |    0    |     0    |
    |   1235     |      2     |    0    |     0    |
    |   1235     |      3     |    0    |     0    |
    |   1234     |      1     |    0    |     0    |

1 个答案:

答案 0 :(得分:1)

行中的评论。

Private conString As String = "Your connection string"

Private Sub EnrollStudent(StudentID As Integer, SubjectID As Integer)
    'Question Does Subject have a prerequisite?
    Dim Prerequisite As Integer
    Using cn As New MySqlConnection(conString)
        Using cmd As New MySqlCommand("Select pre_id from subject_bsit 
                                        where subject_id = @subject_id", cn)
            cmd.Parameters.Add("@subject_id", MySqlDbType.Int32).Value = SubjectID
            cn.Open()
            Prerequisite = CInt(cmd.ExecuteScalar)
        End Using
    End Using
    'Answer - No, It is OK to enroll student there are no prerequisites
    If Prerequisite = 0 Then
        InsertEnrollment(StudentID, SubjectID)
        Return
    End If
    'Answer - Yes there Is a prerequisite
    'New Question - Has the student passed the prerequisite?
    Dim PassingGrade As Integer
    Using cn As New MySqlConnection(conString)
        Using cmd As New MySqlCommand("Select Grade From student_subject 
                                        Where subject_id = @subject_id 
                                        And student_id = @student_id", cn)
            cmd.Parameters.Add("@subject_id", MySqlDbType.Int32).Value = Prerequisite
            cmd.Parameters.Add("@student_id", MySqlDbType.Int32).Value = StudentID
            cn.Open()
            PassingGrade = CInt(cmd.ExecuteScalar)
        End Using
    End Using
    'Answer - Yes, student has a passing grade.
    If PassingGrade > 0 Then
        InsertEnrollment(StudentID, StudentID)
    Else 'Answer - No, student does not have a passing grade in prerequisite.
        MessageBox.Show("Student cannot enroll because of prerequisite.")
    End If
End Sub

Private Sub InsertEnrollment(StudentID As Integer, SubjectID As Integer)
    Dim query = "Insert Into student_subject (student_id, subjectId, Grade, Enrolled) 
                Values (@student_id, @subject_id, 0, 1);"
    Using cn As New MySqlConnection(conString)
        Using cmd As New MySqlCommand(query, cn)
            cmd.Parameters.Add("@student_id", MySqlDbType.Int32).Value = StudentID
            cmd.Parameters.Add("@subject_id", MySqlDbType.Int32).Value = SubjectID
            cn.Open()
            cmd.ExecuteNonQuery()
        End Using
    End Using
    MessageBox.Show("Successful enrollment")
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    EnrollStudent(1235, 5)
End Sub

编辑

这里有错字...

If PassingGrade > 0 Then
    InsertEnrollment(StudentID, StudentID)

应该是

If PassingGrade > 0 Then
    InsertEnrollment(StudentID, SubjectID)

第二个参数是SubjectID