-1
votes

Liste imbriquée dans une requête dans MySQL

Je construis une base de données de professeur-conférence-étudiant dont je me suis lutté pour obtenir la bonne requête MySQL pour.

Voici mes tables: P>

SELECT GROUP_CONCAT(DISTINCT p.name, ' ' ORDER BY RAND() SEPARATOR ', ') 
FROM students p, lectures_students q
WHERE q.lectureid = 17 
AND p.id = q.studentid
AND p.instate = 1
  • Certaines conférences sont proposées cette année, certaines ou non li>
  • Certains étudiants sont instaurés, d'autres ou non li> ul>

    question que j'essaie d'écrire: p>

    pour le professeur ID = 1, je veux une liste de toutes les conférences qu'il enseigne cette année (offertChisyear = 1) et Une liste des seuls étudiants instaux (Instate = 1) enregistrés pour la classe. Si une conférence n'a pas d'étudiant, je veux que cela soit toujours répertorié. P>


    Mes requêtes: p> xxx pré>

    retourne p>

    Lecture 15=Law (Joshua, Patricia)
    Lecture 7=Philosophy (Patricia, Joshua, Mary, Joseph, Sandra)
    Lecture 17=Mathematics (Jessica)
    Lecture 13=German ()
    


0 commentaires

3 Réponses :


0
votes

Je pense que vous voulez rejoindre code> s et agrégation. Vous pouvez commencer à rejoindre à partir de conférences code>, puis suivez les relations avec Lecture_Students code>, puis étudiants code>; Le filtre sur 'Instate' code> Les élèves doivent être placés dans la clause code> sur code> du rejoindre code>. Ensuite, vous pouvez regrouper par conférence et énumérer les noms de tous les étudiants qui ont assisté à chaque conférence.

select 
    l.id,
    l.name, 
    group_concat(s.name order by s.id) student_names
from lectures l
left join lecture_student ls on ls.professorId = l.professorId
left join student s on s.id = ls.studentId and s.inState = 1
where l.professorid = 2 and l.offeredthisyear = 1
group by l.id, l.name


0 commentaires

0
votes

Je ne crois pas que vous ayez assez installé sur ce que vos noms de table réels sont (c'est-à-dire que vous n'avez pas été cohérent), vous devrez donc vous excuser si je ne les ai pas bien.

Le suivant SQL utilise la synaxe actuellement acceptée Synax: xxx

Remarque: j'ai utilisé l , s et ls comme alés pour les tableaux de manière plus logique.

J'utilise les jointures de gauche sur Lecture_Student et étudiant au cas où il n'y a pas de étudiants inscrits dans une conférence particulière.


1 commentaires

Ronald, merci. Désolé, j'ai les noms de variable / table confus. S'il vous plaît voir ma réponse ci-dessous.



0
votes

Merci aux deux intervenants. J'ai combiné pour obtenir le résultat correct. Ce code fonctionne. xxx


2 commentaires

Je regardais le SQL que vous avez eu sous la légende Je ne veux pas faire une requête séparée pour chaque conférence comme celle-ci: où vous avez fait pas avez où l.professorid = 2 et l.offeredChisyear = 1 et c'est pourquoi je n'ai pas inclus ces conditions dans mon SQL. Ce n'était vraiment pas clair quelles conditions vous êtes intéressé. Je pense que l'essence de votre problème était les jointures.


C'est exactement la même réponse que la mienne, à part la commande de Rand () ... Quoi qu'il en soit, je ne peux que suggérer que vous choisissez une des réponses ci-dessus et l'accepte plutôt que de poster votre propre. Voir Ce lien pour comment procéder.