Maison  >  Article  >  base de données  >  Comment récupérer plusieurs enregistrements et leurs données associées dans une seule requête MySQL ?

Comment récupérer plusieurs enregistrements et leurs données associées dans une seule requête MySQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-31 22:20:18222parcourir

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

Renvoi de données à réponses multiples en une seule réponse

Dans votre code PHP, vous avez une requête qui récupère plusieurs lignes de données à partir d'une table de base de données . Cependant, vous obtenez plusieurs réponses et vous souhaitez les fusionner en une seule réponse avec plusieurs enregistrements.

Pour y parvenir, vous devez modifier votre requête pour effectuer une jointure gauche sur les tables nécessaires. Au lieu de récupérer les données des étudiants, vous récupérerez les données du sujet et inclurez les informations pertinentes sur les étudiants à l'aide de jointures à gauche. Cela vous permettra d'inclure des données associées provenant de plusieurs tables dans une seule réponse.

Voici un exemple de requête mise à jour :

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

Dans cette requête :

  • La clause FROM commence désormais par tbsubjects AS sujets pour récupérer les données du sujet.
  • Les clauses LEFT JOIN sont utilisées pour joindre la table tbsubjects à la table tbusers pour récupérer le nom d'utilisateur correspondant.
  • Le les sous-requêtes sont utilisées pour calculer les valeurs subjectid, subjectname, activepts, totalpts, sem1, sem2 et sem3 pour chaque enregistrement de sujet.

Après avoir exécuté cette requête, vous obtiendrez une réponse unique contenant plusieurs enregistrements de sujet. , chacun avec les informations nécessaires sur l'élève et les valeurs calculées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn