Как обновить строку в соединительной таблице для оценки ученика

Вы можете использовать | оператор для комбинирования запросов напрямую, без необходимости в Q-объектах:

result = Item.objects.filter(item.creator = owner) | Item.objects.filter(item.moderated = False)

(edit - изначально я был не уверен, вызвал ли это дополнительный запрос, но @spookylukey указал, что эта ленивая оценка набора запросов позаботится об этом)

1
задан Kimberypalet 19 March 2019 в 15:45
поделиться

2 ответа

Во-первых, вы не ОБНОВЛЯЕТе student_subject. Поскольку в таблице subject_bsit нет столбца student_id, вы не можете связать оценку со студентом.

ОБНОВЛЕНИЕ subject_bsit Установить оценку = @grade Где subject_ID = @subject_ID

Это позволит выполнить то же самое.

Это схема, которую я предлагаю.

ученики

+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| studentID   | int(11)      | NO   | PRI | NULL    | auto_increment |
| studentName | varchar(100) | NO   |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

классы

+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| studentID | int(11)      | NO   | PRI | NULL    |       |
| subjectID | int(11)      | NO   | PRI | NULL    |       |
| grade     | decimal(3,2) | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+

Два иностранных ключа

  1. grades.studentID (FK) < - Students.studentID (PK)

  2. grades.subjectID (FK) < - subjects.subjectID (PK)

  3. [117 ]

    Обратите внимание, что таблица оценок содержит составной ключ, состоящий из 2 полей.

    предметы

    +-------------+--------------+------+-----+---------+----------------+
    | Field       | Type         | Null | Key | Default | Extra          |
    +-------------+--------------+------+-----+---------+----------------+
    | subjectID   | int(11)      | NO   | PRI | NULL    | auto_increment |
    | subjectName | varchar(100) | NO   |     | NULL    |                |
    +-------------+--------------+------+-----+---------+----------------+
    

    Пожалуйста, всегда используйте параметры при общении с базой данных. Это поможет защитить вашу базу данных от Sql Injection.

    Блоки «Использование» закрывают и удаляют объекты базы данных даже в случае ошибки.

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim query As String = "Update grades 
                               Set grade = @grade
                               Where studentId = @studentId And subjectID = @subjectID"
        Using cn As New MySqlConnection(My.Settings.StudentConnection)
            Using cmd As New MySqlCommand(query, cn)
                cmd.Parameters.Add("@grade", MySqlDbType.Decimal).Value = 1
                cmd.Parameters.Add("@studentID", MySqlDbType.Int32).Value = CInt(TextBox1.Text)
                cmd.Parameters.Add("@subjectID", MySqlDbType.Int32).Value = 1
                cn.Open()
                cmd.ExecuteNonQuery()
            End Using
        End Using
    End Sub
    

    Чтобы отобразить оценки учеников, добавьте DataGridView в форму.

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim dt As New DataTable
        Dim query As String = "Select st.studentName, sub.subjectName, g.grade
                                From grades g
                                Inner Join  students st  on g.studentID = st.studentID
                                Inner Join subjects sub on g.subjectID = sub.subjectID
                                Where st.studentID = @studentID;"
        Using cn As New MySqlConnection(My.Settings.StudentConnection)
            Using cmd As New MySqlCommand(query, cn)
                cmd.Parameters.Add("@studentID", MySqlDbType.Int32).Value = CInt(TextBox1.Text)
                cn.Open()
                dt.Load(cmd.ExecuteReader)
            End Using
        End Using
        DataGridView1.DataSource = dt
    End Sub
    
0
ответ дан Mary 19 March 2019 в 15:45
поделиться

Ваш запрос колеблется, он должен выглядеть примерно так

UPDATE student_subject 
INNER JOIN subject_bsit 
ON subject_bsit.subject_id = student_subject.sub_id 
SET grade=? 
where student_subject.student_id='" & Txtbox.Text & "' AND student_subject.sub_id = 1
.
0
ответ дан Mihai 19 March 2019 в 15:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: