Maison > base de données > tutoriel mysql > le corps du texte

Voici quelques titres basés sur des questions qui correspondent à votre article fourni : * Comment fusionner les sujets étudiants en un seul enregistrement avec un LEFT JOIN et des sous-requêtes ? * Création d'une structure de données étudiantes unifiée avec

Susan Sarandon
Libérer: 2024-10-26 23:01:31
original
643 Les gens l'ont consulté

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

retourner plusieurs données de réponse dans une seule réponse

Dans la question précédente, je demandais comment fusionner toutes les matières de tous les semestres dans un seul enregistrement afin que chaque étudiant doive avoir une seule réponse et ses données ressembleront à cet exemple :

<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>
Copier après la connexion

J'ai donc eu une et une seule réponse mais la réponse ne m'a pas dit comment le faire, m'a juste dit la raison pour laquelle je dois utiliser LEFT JOIN et expliquez-moi ce que LEFT JOIN fera dans mon cas, je vais donc vous expliquer à nouveau ce que je dois faire puis j'expliquerai comment faire cela par code et quelques exemples :

Les points principaux de toute l'opération :

1- Chaque élève aura une réponse
2- Chaque réponse contient tous ses sujets, chaque sujet sera une ligne
3- La première ligne contiendra quelques données statiques pour l'élève :

  • userid : l'identifiant de l'utilisateur dans la table users
  • username : le nom de l'utilisateur dans la table users
  • subjectsid : l'identifiant du premier sujet de cet élève
  • subjectname : le nom du sujet actuel pour cette ligne maintenant
  • activepts : les points du sujet actuel
  • totalpts : le total des points de cet élève dans toutes les matières
  • sem1, sem2, sem3 : total des points de cet étudiant à chaque semestre

4- Le reste des lignes est le même comme ce qui me vient de la DB et pas besoin de changer quelque chose sauf filtrer les sujets pour qu'ils soient uniquement pour cet utilisateur

Le code pour faire cette opération :

<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>
Copier après la connexion

Expliquez le code :
1- Les champs dans l'instruction SELECT, comme vous pouvez le voir, ils sont divisés en 2 groupes, le premier en haut est constitué de champs statiques pour l'étudiant, le reste obtiendra les valeurs de la table tbsubjects
2- La fonction LEFT JOIN est chargée d'obtenir all (userid) de la table tbsubjects et fusionnez-les par la clé commune entre eux userid, ce qui signifie que maintenant chaque utilisateur sera représenté par au moins une ligne contenant son premier sujet ( ORDER BY id ASC ) puis tous ses autres sujets, mais ils ont déjà fusionné dans une ligne seront répétés dans le reste des lignes comme les champs statiques de l'étudiant

Exemple de sortie :

<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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!