„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > 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?

Veröffentlicht am 03.11.2024
Durchsuche:829

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

$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';

In dieser Abfrage:

  • Die FROM-Klausel beginnt jetzt mit tbsubjects AS-Subjekten zum Abrufen Betreffdaten.
  • Die LEFT JOIN-Klauseln werden verwendet, um die Tabelle tbsubjects mit der Tabelle tbusers zu verknüpfen, um den entsprechenden Benutzernamen abzurufen.
  • Die Unterabfragen werden zur Berechnung von subjectid, subjectname, activepts, totalpts verwendet , sem1, sem2 und sem3 Werte für jeden Fachdatensatz.

Nachdem Sie diese Abfrage ausgeführt haben, erhalten Sie eine einzelne Antwort mit mehreren Fachdatensätzen, jeweils mit den erforderlichen Studenteninformationen und berechneten Werten.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3