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:
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:
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
<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
<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!