Heim  >  Artikel  >  Datenbank  >  Hier sind einige fragenbasierte Titel, die zu Ihrem bereitgestellten Artikel passen: * Wie füge ich Schülerthemen mit einem LEFT JOIN und Unterabfragen in einem Datensatz zusammen? * Erstellen einer einheitlichen Studentendatenstruktur mit

Hier sind einige fragenbasierte Titel, die zu Ihrem bereitgestellten Artikel passen: * Wie füge ich Schülerthemen mit einem LEFT JOIN und Unterabfragen in einem Datensatz zusammen? * Erstellen einer einheitlichen Studentendatenstruktur mit

Susan Sarandon
Susan SarandonOriginal
2024-10-26 23:01:31644Durchsuche

Here are a few question-based titles that fit your provided article:

* How to Merge Student Subjects into One Record with a LEFT JOIN and Subqueries?
* Creating a Unified Student Data Structure with Subjects and Semester Scores: A SQL Query Approach
* Ef

mehrere Antwortdaten in einer Antwort zurückgeben

In der vorherigen Frage habe ich gefragt, wie man alle Fächer aller Semester in einem Datensatz zusammenführen kann, sodass jeder Student eine Antwort haben sollte und seine Daten werden wie in diesem Beispiel aussehen:

<code class="json">[
{
"userid": "1", - from users table
"username": "joe",  - from users table 
"subjectsid": "1", - first subject id for the student in this case the one for phy
"subjectname": "bio", - current subject name 
"activepts": "652", - points of current month
"totalpts": "717", - total points of all subjects for this student
"sem1": "32", - total points of all subjects for this student of semester 1
"sem2": "0", - total points of all subjects for this student of semester 2
"sem3": "685", - total points of all subjects for this student of semester 3
}
]</code>

Ich habe also nur eine Antwort bekommen, aber die Antwort hat mir nicht gesagt, wie es geht, sondern nur den Grund, warum ich LEFT JOIN verwenden muss und erkläre mir, was LEFT JOIN in meinem Fall bewirken wird, also erkläre ich noch einmal, was ich tun muss, dann erkläre ich anhand von Code und einigen Beispielen, wie das geht:

Die wichtigsten Punkte für den gesamten Vorgang :

1- Jeder Schüler erhält eine Antwort
2- Jede Antwort enthält alle seine Fächer, jedes Fach ist eine Zeile
3- Die erste Zeile enthält einige statische Daten für den Schüler:

  • Benutzer-ID: die ID des Benutzers in der Tabelle „Benutzer“
  • Benutzername: der Name des Benutzers in der Tabelle „Benutzer“
  • Subjekt-ID: die ID des ersten Betreffs dieses Schülers
  • Fachname: der Name des aktuellen Fachs für diese Zeile jetzt
  • aktive Punkte: die Punkte des aktuellen Fachs
  • Gesamtpunkte: die Gesamtpunktzahl für diesen Schüler in alle Fächer
  • Sem1, Sem2, Sem3: Gesamtpunktzahl dieses Studenten in jedem Semester

4- Die restlichen Zeilen sind die gleichen wie die, die ich aus der DB erhalten habe, und das ist nicht nötig Ändern Sie etwas, außer die Themen so zu filtern, dass sie nur für diesen Benutzer gelten

Der Code für diesen Vorgang:

<code class="php">$sql = 'SELECT 
                subjects.userid,
                users.name AS username,
                (
                    SELECT id 
                    FROM tbsubjects 
                    WHERE userid = subjects.userid 
                    ORDER BY id ASC 
                    LIMIT 1
                ) AS subjectsid,
                (
                    SELECT name 
                    FROM tbsubjects 
                    WHERE 
                        userid = subjects.userid 
                        ORDER BY time DESC
                        LIMIT 1
                ) AS subjectname,
                (
                    SELECT IFNULL(SUM(points), 0) 
                    FROM tbsubjects 
                    WHERE 
                        userid = subjects.userid 
                        AND month = DATE_FORMAT(NOW(), "%c")
                ) AS activepts,
                IFNULL(SUM(subjects.points), 0) AS totalpts,
                (
                    SELECT IFNULL(SUM(points), 0) 
                    FROM tbsubjects 
                    WHERE 
                        userid = subjects.userid 
                        AND semester = 1
                ) AS sem1,
                (
                    SELECT IFNULL(SUM(points), 0) 
                    FROM tbsubjects 
                    WHERE 
                        userid = subjects.userid 
                        AND semester = 2
                ) AS sem2,
                (
                    SELECT IFNULL(SUM(points), 0) 
                    FROM tbsubjects 
                    WHERE 
                        userid = subjects.userid 
                        AND semester = 3
                ) AS sem3 
            FROM 
                tbsubjects AS subjects 
                LEFT JOIN tbusers AS users ON users.id = subjects.userid 
            WHERE subjects.userid = :userid';

    $bindings = array(
        ':userid' => $userID,
    );

    $users = $statement->fetchAll(PDO::FETCH_OBJ);</code>

Erklären Sie den Code:
1- Felder In der SELECT-Anweisung sind sie, wie Sie sehen können, in zwei Gruppen unterteilt. Die erste oben sind statische Felder für den Schüler, der Rest erhält die Werte aus der Tabelle tbsubjects
2- Die LEFT JOIN-Funktion ist für das Abrufen verantwortlich alle (userid) aus der Tabelle tbsubjects und führen Sie sie durch den gemeinsamen Schlüssel zwischen ihnen userid zusammen, was bedeutet, dass jetzt jeder Benutzer durch mindestens eine Zeile dargestellt wird, die sein erstes Subjekt ( ORDER BY id ASC ) enthält, dann alle seine anderen Subjekte, aber sie werden bereits in einer Zeile zusammengeführt und in den restlichen Zeilen als die statischen Felder des Schülers wiederholt

Beispiel für die Ausgabe:

<code class="json">[
{
"userid": "1", - from users table
"username": "joe",  - from users table 
"subjectsid": "1", - first subject id for the student in this case the one for phy
"subjectname": "bio", - current subject name 
"activepts": "652", - points of current month
"totalpts": "717", - total points of all subjects for this student
"sem1": "32", - total points of all subjects for this student of semester 1
"sem2": "0", - total points of all subjects for this student of semester 2
"sem3": "685", - total points of all subjects for this student of semester 3
},
{
"userid": "1", - from users table
"username": "joe",  - from users table 
"subjectsid": "1", - first subject id for the student in this case the one for phy
"subjectname": "phy", - current subject name 
"activepts": "10", - points of current month
"totalpts": "717", - total points of all subjects for this student
"sem1": "32", - total points of all subjects for this student of semester 1
"sem2": "0", - total points of all subjects for this student of semester 2
"sem3": "685", - total points of all subjects for this student of semester 3
},
{
"userid": "1", - from users table
"username": "joe",  - from users table 
"subjectsid": "1", - first subject id for the student in this case the one for phy
"subjectname": "math", - current subject name 
"activepts": "33", - points of current month
"totalpts": "717", - total points of all subjects for this student
"sem1": "32", - total points of all subjects for this student of semester 1
"sem2": "0", - total points of all subjects for this student of semester 2
"sem3": "685", - total points of all subjects for this student of semester 3
}
]</code>

Das obige ist der detaillierte Inhalt vonHier sind einige fragenbasierte Titel, die zu Ihrem bereitgestellten Artikel passen: * Wie füge ich Schülerthemen mit einem LEFT JOIN und Unterabfragen in einem Datensatz zusammen? * Erstellen einer einheitlichen Studentendatenstruktur mit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn