Heim  >  Artikel  >  Datenbank  >  Wie rufe ich mehrere Datensätze und die zugehörigen Daten in einer einzigen MySQL-Abfrage ab?

Wie rufe ich mehrere Datensätze und die zugehörigen Daten in einer einzigen MySQL-Abfrage ab?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-31 22:20:18220Durchsuche

 How to Fetch Multiple Records and Their Related Data in a Single MySQL Query?

Mehrere Antwortdaten in einer Antwort zurückgeben

In Ihrem PHP-Code haben Sie eine Abfrage, die mehrere Datenzeilen aus einer Datenbanktabelle abruft . Sie erhalten jedoch mehrere Antworten und möchten diese zu einer einzigen Antwort mit mehreren Datensätzen zusammenführen.

Um dies zu erreichen, müssen Sie Ihre Abfrage ändern, um einen Links-Join für die erforderlichen Tabellen durchzuführen. Anstatt Studentendaten abzurufen, rufen Sie Fachdaten ab und beziehen die relevanten Studenteninformationen mithilfe von Linksverknüpfungen ein. Dadurch können Sie verwandte Daten aus mehreren Tabellen in einer einzigen Antwort einschließen.

Hier ist ein Beispiel der aktualisierten Abfrage:

<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 GROUP BY subjects.userid ORDER BY subjects.time DESC';</code>

In dieser Abfrage:

  • Die FROM-Klausel beginnt jetzt mit tbsubjects AS-Subjects, um Subjektdaten abzurufen.
  • Die LEFT JOIN-Klauseln werden verwendet, um die tbsubjects-Tabelle mit der tbusers-Tabelle zu verknüpfen, um den entsprechenden Benutzernamen abzurufen.
  • Die Unterabfragen werden verwendet, um die Werte subjectid, subjectname, activepts, totalpts, sem1, sem2 und sem3 für jeden Subjektdatensatz zu berechnen.

Nach dem Ausführen dieser Abfrage erhalten Sie eine einzelne Antwort mit mehreren Subjektdatensätzen , jeweils mit den notwendigen Schülerinformationen und berechneten Werten.

Das obige ist der detaillierte Inhalt vonWie rufe ich mehrere Datensätze und die zugehörigen Daten in einer einzigen MySQL-Abfrage ab?. 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