Извините, я задал еще один вопрос, потому что мой последний вопрос слишком сбивает с толку.
Обновлено: мой текущий ЗАПРОС
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
Я хочу, чтобы это произошло.
Студенческий_id = 1235 пытается зарегистрировать id_субъекта=5, поэтому этот оператор не должен выполняться, поскольку id_субъекта=5 имеет Предпосылку для id_субъекта=1 или программирование 1.
Но если, например, в student_subject sub_id 1 и Enrolled=1 означает, что студент закончил программирование и уже зачислен, студент=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 |
Привет, у меня уже есть мой SQL-запрос, но у меня проблема из-за соединительной таблицы и слишком большого количества соединений, я обновлю его своим запросом.
И удалите тот или иной ваш вопрос.






Комментарии в очереди.
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.
Привет, это работает, если я пытаюсь добавить тему без предварительных условий. но я пытаюсь добавить идентификатор субъекта, у которого есть пререйсит, это ошибка. Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не работает (csais.student_subject, CONSTRAINT student_subject_ibfk_2 FOREIGN KEY (sub_id) REFERENCES subject_bsit (subject_id))
@Kimberypalet Очень жаль, это была опечатка. Смотрите редактирование моего ответа. Если это работает для вас, пожалуйста, примите мой ответ, нажав на галочку (галочку) слева от ответа.
Привет. Еще раз спасибо. Можешь еще раз помочь?? Я работаю над другой проблемой. Что, если проходной балл равен только 1,2 и 3, а 5 равен Failed, а также есть еще один «INC», означающий неполный, поэтому мне нужно установить проходной балл в виде строки, а функция Cint предназначена только для Integer?
Я предлагаю вам принять мой ответ и задать новый вопрос.
Извиняюсь. Большое спасибо.
Подумайте, что именно вы хотите получить. Вам нужны записи из
student_subject, гдеstudent_idсоответствует вашему студенту, аEnrolledравно 1, аsubject_idравноpre_idизsubject_bsit, гдеsubject_idсоответствует предмету, на который вы хотите записаться. Если у вас возникли проблемы с написанием SQL-запрос, то это обычно потому, что у вас нет четкого представления о том, что должен делать запрос, поэтому сначала поработайте над этим. Возьмите ручку и бумагу и напишите простым языком. Затем вы можете написать код для его постепенной реализации.