Bonjour,
je dois affiché les réponses des questions par chapitre selon le projet. Donc j'ai un clé étrangère du chapitre (id_chapitre) dans la table Questions , car les chapitres peuvent avoir plusieurs questions et chaque question doit avoir seulement un chapitre.
De plus, les réponses aux questions dépendent de la question et du projet (1..--> 1..) donc j'ai crée la relation "ReponseSquestion" entre ces deux tables.
La table "ReponseSquestion" contient les clés étrangères: de la table "projets" -> id_projet et de la table "Questions" -> questions_id
Les réponses aux questions doivent être unique par projet.
dans ma page vue je dois affiché les questions en présentant son réponse (par projet) ainsi que les question qui ont pas des réponses (par chapitre).
Donc, mon probléme que j'arrive pas a obtenir la bonne requête pour récupérer ces informations par projet, j'ai trompé dans l'utilisation de jointure.
merci de me corriger.
-Mon essai:
SELECT *
FROM ReponseSquestion res
LEFT JOIN Chapitres chp
ON chp.id =:IdChapitre -- ici il faudrait la jointure res et chp
LEFT JOIN Questions ques
ON ques.id = res.questions_id
WHERE res.id_projet = :id
GROUP BY res.id_projet
Cette requete permet d'afficher les même questions qui ont la réponse pour tous les chapitres et il écrase le reste des questions (n'ayant pas des réponses). C'est-a-dire, par exemple j'ai dans mon table "ReponseSquestion" une seule question répondu pour le chapitre N°5 et le projet N°4 (le regroupement par projet ça marche). Donc cette question elle est affiché avec son réponse pour tous les chapitres mais j'ai pas besoin de ça (j'ai des questions différentes par chapitre que ne se répètent pas ),. De plus, pour chaque chapitre j'ai des questions qui ont des réponses et d'autres non.
Avec la première, tu as la liste des "id de question" déjà répondu, tu en fais un tableau ou un "string" séparé par une virgule (selon l'ORM utilisé).
Puis tu fais simplement :
SELECT *
FROM Questions ques
LEFT JOIN ReponseSquestion res
ON ques.id = res.questions_id
LEFT JOIN Chapitres chp
ON chp.idChp = ques.chapitre_id
WHERE ques.id NOT IN ($taListe) AND res.id_projet = :id AND chp.id = :IdChapitre
GROUP BY ques.id
Encore une fois, je ne comprend pas tout de la logique, donc je te laisse déméler ;)
A priori, il doit y avoir moyen d'utiliser IS NULL pour les questions non répondus sans passer par la liste d'id.
Salut,
Tu as une clé étrangère dans la table Chapitres qui permettrait de la relier à la table ReponseSquestion ?
non, j'ai les clés étrangéres suivantes;
=> donc pas besoin de relier la table Chapitres avec la table ReponseSquestion car il n'existe aucune relation entre eux, c'est çà ?
Comment compte-tu relier tes tables dans ce cas là ?
Comment s'organise ton schéma de BD ? J'avoue avoir un peu de mal à visualiser...
A vrai dire, je n'ai pas tout compris non plus, donc j'ai brodé autour de tes explications.
SELECT *
FROM ReponseSquestion res
LEFT JOIN Questions ques
ON ques.id = res.questions_id
LEFT JOIN Chapitres chp
ON chp.idChp = ques.chapitre_id
WHERE res.id_projet = :id AND chp.id = :IdChapitre
En gros, je récupère les réponses qui sont liés aux questions, qui sont eux même liés aux chapitres.
Mais je ne renvoi que les réponses appartenant aux projets ":id" et aux chapitres ":idChapitre".
De ce que j'ai compris, c'est ce que tu souhaites obtenir.
Merci pour tes réponses mes amis,
neecride, oui l'id est dans le get. il est bien récupéré .
Exactement ce que je veux Kenor mais il manque un autre chose " Mais je renvoi les réponses appartenant aux projets ":id" et aux chapitres ":idChapitre" et aussi les questions qui ne sont pas encore répondu par chapitre (:idChapitre) "