Page 1 sur 1

tableau avec 2 tables BDD

Posté : 24 nov. 2016, 22:31
par Domy59
Bonjour,

j'ai un chti soucis !!

je voudrais visualiser les données de 2 tables de la même base de données, dans un tableau, dans la colonne 1 et 2 les donees de la table 1 et dans les colonne 3,4 et 5 ceux de la 2eme table.
j'ai retourné le problème dans tout les sens sans trouver la bonne méthode? donc il ne me reste plus qu'a demande de l'aide, merci d'avance,

ci dessous mon dernier essai seul les données de la première table fonctionnent?

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Document sans titre</title> </head> <body> <link rel="stylesheet" type="text/css" href="custom.css"> <link rel="stylesheet" type="text/css" href="rocssti-fr.css"> <?php $db = new PDO('mysql:host=localhost;dbname=obs_com_secu', 'root', ''); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //========= 1er requete ===================================== $sql1 = "SELECT * FROM obs_question ORDER BY ID_question ASC "; $stmt1 = $db->query($sql1); $rows1 = $stmt1->fetchall(PDO::FETCH_ASSOC); //========= 2eme requete ===================================== $sql2 = "SELECT * FROM obs_reponses WHERE ID_question=1 "; $stmt2 = $db->query($sql2); $rows2 = $stmt2->fetchall(PDO::FETCH_ASSOC); //var_dump($rows); //die(); ?> <!--======================DEBUT ENTETE DU TABLEAU=====================================================--> <div align="center" style="width:700"> <div class="grid w50 BlocBlanc"> <table width="720" border="1" cellspacing="0" cellpadding="1"> <tr>&nbsp;</tr> <tr> <td width="44">ID</td> <td width="190">Question</td> <td width="86">en S&eacute;curit&egrave;</td> <td width="66">&aacute; Risque</td> <td width="286">Commentaire</td> <td width="30"><img src="images/sav16.png" width="16" height="16" title="Sauvegarder" /></td> <td width="30"><img src="images/valider16.png" width="16" height="16" title="Valider ???" /></td> <td width="34"><img src="images/transmis16.png" width="16" height="16" title="Transmettre ???" /></td> <!--td width="32"><img src="images/poubelle16.png"width="16" height="16" title="Supprimer l'enregistrement"/></td--> </tr> </table> </div> <!--============================FIN ENTETE DU TABLEAU=================================================--> <br /> <!--======================DEBUT VISUEL DU TABLEAU=====================================================--> <div class="grid w50 autotablet BlocBlanc"> <!--div style="padding:1"--> <table width="720" border="1" cellspacing="0" cellpadding="1"> <?php foreach($rows1 as $row1): ?> <tr> <!-- ========================= 1er colonne du tableau avec l'icone loupe ================= <!-- ==================================================================================== --> <td width="28"><?= $row1["ID_question"]?></td> <td width="90"><?= $row1["question_text"]?></td> <!-- ================INSERTION DES DONN2ES DE LA 2EME TABLE============================== --> <td width="200"><?= $row2["reponse_value"]?></td>'; //=======================================================================================--> <?php endforeach;?> </tr> </table> </div> <!--============================FIN DE L'AFFICHAGE DU TABLEAU ===========================-->
merci pour votre aide
Amicalement Domy

Re: tableau avec 2 tables BDD

Posté : 25 nov. 2016, 09:14
par Spols
Ce que tu cherche s'appel une jointure, c'est très commun en SQL mais pas si évident au début.

Il te faut trouver un paramètre en commun entre tes tables et l'utiliser pour les joindre.
je suppose (car je connais pas tes structures de tables) que id_question est ton paramètre commun

Select * FROM obs_question q Join obs_reponses r ON q.id_question = r.id_question
WHERE ...

Remarque que j'ai ajouté q ou r après les nom de table, cela sert à leur donner un alias utilisé dans la clause ON afin de ne pas confondre les colonnes de chacune des tables.
Remarques aussi que s'il y a plusieurs réponses pour une question, tu auras une ligne par réponse avec la question correspondante.
Si il y a plusieurs questions et plusieurs réponses avec le même id_question (illogique dans ton cas, mais c'est pour illustrer la jointure) tu aura une ligne par couple question réponse possible. donc avec 2 questions et 2 réponses, 4 lignes diffèrentes

Re: tableau avec 2 tables BDD

Posté : 25 nov. 2016, 17:04
par Domy59
Merci pour ton aide ,
je vais essaya ça si ça fonctionne .

je reviens pour valider et clore le sujet
encore merci :D

je confirme !!! ça marche,
par contre la requete n'affiche que les lignes ou il y a une données, dans mon cas le tableau comporte 22 lignes et je voudrais quelles s'affiches même si elle sont vide car pour le moment je ne contrôle pas la saisie.
Je met si dessous ma requête et une image des tables merci si tu peu encore m'aider sur ce coup!! =D>

Code : Tout sélectionner

$sql = "Select * FROM obs_question q Join obs_reponses r ON q.id_question = r.id_question WHERE ID_user=2";
Image

Re: tableau avec 2 tables BDD

Posté : 25 nov. 2016, 18:40
par Naroth
Bonsoir,

Regarde du côté des outer/left/right join en sql ;)

Re: tableau avec 2 tables BDD

Posté : 25 nov. 2016, 19:51
par Domy59
Bonsoir,
Regarde du côté des outer/left/right join en sql ;)

Merci de ton aide, mais est ce que tu peu être un peu plus explicite?
je ne comprend pas ta réponse désolé :priere:

Re: tableau avec 2 tables BDD

Posté : 25 nov. 2016, 19:55
par Naroth
Voici un bon résumé pour expliqué les différentes jointures existantes

http://stackoverflow.com/questions/4480 ... wer-448080

Parce que Stackoverflow c'est bien !

Re: [RESOLU] tableau avec 2 tables BDD

Posté : 26 nov. 2016, 09:54
par Domy59
Merci pour ton aide Naroth, Tuto très clair.
A bientôt peu être sur une autre sujet.
Amicalement, Domy