Requête Multitable

cs_ripoux Messages postés 30 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 31 mai 2005 - 10 mai 2005 à 08:44
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 10 mai 2005 à 21:09
Bonjour,

J'ai un soucis au niveau des requêtes multitable en MySQL...
Voila ce que j'aimerais faire:
J'ai une table de "question" et un table de "réponse" pour chacune de ces 2 tables, j'ai 1 table associative pour la traduction en 3 langue. J'aimerais afficher dans une page, chaque question entrée avec a chaque fois toute les réponses associé aux questions.

Mon shéma de tables:

T_QUESTION (1)----------------(n) T_QUEST_LANGUE
(1)
|
|
|
(n)
T_REPONSE (1)-----------------(n) T_REP_LANGUE

J'ai besoin des champs suivants:

T_QUEST_LANGUE:
- questlg_libelle (champ qui contient le texte de la question avec la clause where questlg_codelg = '$LangueChoisieParLutilisateur')

T_REP_LANGUE
- replg_libelle (champ qui contient le texte des réponses avec la clause where replg_codelg = '$LangueChoisieParLutilisateur')

Mais pour réussir a accouplé les réponses avec les questions il me faut aussi:

T_QUESTION
- quest_id

T_REPONSE:
- rep_quest_id (fk qui relie T_QUESTION à T_REPONSE)

exemple de ce que j'ai fais:
$reqquest mysql_query("SELECT questlg_libelle from t_quest_langue where questlg_codelg '$langage'") or die ("erreur sql ".mysql_error());
$reqrep mysql_query("SELECT replg_libelle from t_rep_langue where replg_codelg '$langage' ") or die ("erreur sql ".mysql_error());

La, logiquement il m'affiche les questions et ensuite toutes les réponses qu'il y a dans ma bases... même si elle ne correspondent pas a la question.

Il me faudrait qqch dans ce style:
$reqquest mysql_query("SELECT QLG.questlg_libelle, Q.quest_id from t_quest_langue QLG, t_question Q where questlg_codelg '$langage'") or die ("erreur sql ".mysql_error());

$questionid = $reqquest['quest_id']
$reqrep mysql_query("SELECT RLG.replg_libelle, R.rep_quest_id from t_rep_langue RLG, t_reponse R where replg_codelg '$langage' and rep_quest_id = '$questionid '") or die ("erreur sql ".mysql_error());

Alors si quelqu'un pourrais m'aider ou me dire si mon explication n'est pas assez claire...

En tout cas je suis certain qu'il faut une requête multitable pour réaliser ceci... mais je n'ai ni trouvé dans mes bouquins ni sur internet une explication assez claire pour moi.

3 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
10 mai 2005 à 11:57
Hello,



je n'ai pas compris ou etaient les questions et reponses dans differentes langues, perso.

Parce que en gros, tu dois demander :

va me chercher les reponses, la ou l'id de cette question est le meme que l'id_question dans ma table de reponses.

En fait tes tables langues contiennent quoi ?

Et ta table reponses (et questions) ?
0
cs_ripoux Messages postés 30 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 31 mai 2005
10 mai 2005 à 12:56
Hello,

Merci a toi de te soucier...
Je viens de trouver la solution... rien de bien compliqué, mais j'ai de la peine a réfléchire avant midi moi lol !!

Pour ceux que ca intéresse voici mes 2 requêtes:
$reqquest mysql_query("SELECT questlg_quest_id, questlg_libelle from t_quest_langue where questlg_codelg '$langage'") or die ("erreur sql ".mysql_error());

/*Je tourne d'abord dans un boucle pour afficher chaques question que me retourne le select ci-dessus.... et ensuite:*/

$id = $question['questlg_quest_id'];

/*Je récupère l'id de la question....*/
$reqrep mysql_query("SELECT RL.replg_rep_id, RL.replg_libelle from t_rep_langue RL, t_reponse R where RL.replg_codelg '$langage' and R.rep_quest_id = '$id' and R.rep_id = RL.replg_rep_id") or die ("erreur sql ".mysql_error());

/*Et pour finir, je tourne dans un boucle pour afficher les réponses en rapport avec la question*/

En fait je n'utilise plus que 3 tables... je laisse tomber ma table T_QUESTION !

Merci encore...

A bientot.

MeK-ï
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
10 mai 2005 à 21:09
Salut,



utilise un LEFT JOIN qui va te retourner la question plusieurs fois
(autant de fois que de lignes retournées) et les réponses, le tout en
une seule requête (le LEFT JOIN n'est pas forcément nécessaire, mais il
te faut faire une jointure si tu as deux tables).



A +

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
Rejoignez-nous