Ich weiß nicht, ob ich die folgende Methode richtig mache, wenn ich sql benutze, aber hier geht es.
Ich möchte alle Prüfungsdetails (Prüfungsdetails (auch bekannt als Sitzung), Prüfungsfragen, Antworten, Strafe, Bilder, Videos usw.) anzeigen. Aber die Art, wie ich es versuche, ist eine große Frage, ist es aber nicht Arbeiten, da keine Zeilen angezeigt werden.
Im Folgenden möchte ich eine Prüfung (und nur eine Prüfung) anzeigen:
Unten sehen Sie die Felder, die jeder Abschnitt von der Datenbank benötigt:
Prüfungsdetails
SessionId, SessionName, SessionDuration, TotalMarks, SessionWeight
Alle Fragen in der Prüfung
QuestionId, QuestionNo, QuestionContent, NoofAnswers, QuestionMarks, OptionId, OptionType, ReplyId, ReplyType
Alle Antworten zu jeder Frage und markiert jede Antwort wert
AnswerId, Answer, AnswerMarks
PenaltyEnabled
PenaltyAnswerId, PenaltyAnswer, PenaltyMarks
ImageId, ImageFile
VideoId VideoFile
AudioId, AudioFile
ModuleId, ModuleNo, ModuleName
StudentId
Meine Frage ist, wie sollte der SQL-Code geschrieben werden, damit all diese Daten angezeigt werden? Benötige ich nur eine große Abfrage oder viele kleine Abfragen? Mein Versuch ist am Ende der Frage, aber unten sind die Datenbanktabellen, die Details zeigen, die sich auf eine Prüfung und alle seine Details beziehen.
TABELLEN:
Student
%Vor%Schüler_Sitzung
%Vor%Sitzung
%Vor%Modul
%Vor%Frage
%Vor%Antwort:
%Vor%Individuelle Antwort
%Vor%Strafe
%Vor%Strafmarkierungen
%Vor%Antworten
%Vor%Option_Table
%Vor%Bild
%Vor%Video
%Vor%Audio
%Vor%Image_Question
%Vor%Video_Question
%Vor%Audio_Question
%Vor%Unten war mein fehlgeschlagener Versuch:
%Vor%UPDATE:
Kann der folgende Code QuestionId nach Fragen in die Image_Question-Tabelle einfügen: (Dies ist etwas, das ich auf SO gefunden habe, aber auf mein Tabellendesign aktualisiert wurde)
%Vor%Und die Logik gefällt mir:
In diesen Tabellen gibt es ein Problem mit Ihren Fremdschlüsseln: Image_Question, Audio_Question und Video_Question.
Sie verwenden die Spalte FrageNr, die nicht durch die Tabelle Frage indiziert ist. Ich würde vorschlagen, stattdessen die Spalten als QuestionId zu ersetzen und ihre Werte zu verwenden.
%Vor%und Ihre Aussage sollte so aussehen:
%Vor%Aktualisierung: Sie können die Spalte QuestionNo verwenden, nachdem Sie den Index hinzugefügt haben, so dass Sie Ihre Codes nicht überholen müssen. hehehe
Ich schlage vor, Sie fügen dies hinzu:
%Vor%und anstelle von diesen:
%Vor%Sie verwenden diese:
%Vor% Ich bin mir zwar nicht 100% sicher, welches genaue Ergebnis Sie wollen. Basierend auf Ihrer vorhandenen Abfrage besteht das Problem, dass Sie INNER JOIN
für einige der Tabellen verwenden, wenn Sie LEFT JOIN
verwenden sollten.
In Ihrer vorhandenen Abfrage verwenden Sie Folgendes:
%Vor% Das Problem besteht darin, dass INNER JOIN
nach übereinstimmenden Datensätzen in allen Feldern sucht, aber Sie haben möglicherweise keinen Datensatz in den Tabellen image
, audio
oder video
, so dass nichts zurückgegeben wird.
Basierend auf Ihren Angaben sollte Ihre Anfrage ähnlich wie folgt aussehen:
%Vor%Siehe SQL Geige mit Demo .
Dies gibt alle Daten zurück, die Sie oben angefordert haben. Beispiel:
%Vor%Das Schlüsselproblem: Häufig werden keine Zeilen zurückgegeben, die einen inneren Join einer äußeren verbundenen Tabelle verwenden
Ich habe unter Verwendung von Microsoft SQL-Syntax unterwandert. Ich hoffe es hilft. Sehen Sie sich meine Warnungen unten an und ignorieren Sie die Anweisung create procedure, wenn Sie möchten, und deklarieren Sie stattdessen einfach die @SessionID auf 1 und setzen Sie sie oben.
%Vor%Warnungen: Sie möchten dies wirklich auf verschiedene Aspekte reduzieren, um sie in Ihrer Client-Anwendung anzuzeigen. Beispielsweise benötigen Sie eine Master- / Detailanzeige für Exams und ExamDetails, ansonsten müssten Sie in der Ausgabe, die dem Benutzer angezeigt wird, Wiederholungswerte unterdrücken. Zum Beispiel würde Ihre Ausgabe wie folgt aussehen:
%Vor%Beachten Sie die sich wiederholenden Werte auf der linken Seite, die Sie unterdrücken müssten.
Nun, versuchen Sie es in kleinen Schichten: Was ich meine ist: - Führen Sie die Abfrage Teil für Teil Entfernen Sie zuerst einige Joins (entfernen Sie die meisten), und fügen Sie sie einzeln hinzu, mache ich dasselbe für meine großen Abfragen, um zu verfolgen, wo das eigentliche Problem ist, oder welche Bedingungen die Hauptunterschiede für das Erhalten der resultierenden Zeilen machen. nur eine Idee. Prost!
Und ich denke
%Vor%gibt Ihnen Nullwerte
Als q.QuestionId startet Form 4 und iq.QuestionNo ist 2
%Vor%Und alle Werte in Iq-Feldern, die aus linken äußeren Joins resultieren, sind null. Wenn also ein innerer Join auf ihnen steht, ist es sicher, dass Sie null Ergebnisse erhalten.