Il y a actuellement 406 visiteurs
Jeudi 29 Janvier 2026
accueilactualitésdossierscomparer les prixtélécharger gratuitement vos logicielsoffres d'emploiforum informatique
Connexion
Créer un compte

Problème de jointure et affichage de données [Réglé]

Besoin d'aide pour configurer un serveur ? Vous souhaitez obtenir des conseils pour référencer votre site ? Un petit souci pour accéder à votre FTP ? Des soucis de programmation en PHP / ASP / HTML / XHTML / XML / XSLT / CSS / ReactJS / AngularJS / VueJS / CGI / PERL / C / MySQL / PostgreSQL ??? Nous avons peut-être la solution dans ce forum ...

Problème de jointure et affichage de données [Réglé]

Message le 15 Déc 2010 16:49

Bonjour,

j'ai crée 2 tables dans mysql :

travaux(idTravaux,nomTravaux,#FK_idCatTravaux)
cattravaux(idCatTravaux,nomCatTravaux)

Je voudrais donc afficher dans une page PHP les catégories de travaux ainsi que tous les travaux appartenant a cette catégorie.

Pour ce faire j'ai testé plusieurs requete et je suis bloqué ...

dernier test :
Code: Tout sélectionner
 $sql = mysql_query('SELECT * FROM travaux WHERE FK_idCatTravaux IN (SELECT idCatTravaux FROM cattravaux)')or die(mysql_error());
 
while($data = mysql_fetch_assoc($sql)){
echo '<ul>';
echo '<li>'.$data["nomTravaux"].'</li>';
echo '</ul>';
}


cela me permet d'afficher tous les travaux alors que je voudrais afficher les catégories de travaux ainsi que dedans tous les travaux qu'elle contient ...

Merci de votre aide :wink:
Avatar de l'utilisateur
italiano1360
Visiteur Confirmé
Visiteur Confirmé
 
Messages: 15
Inscription: 02 Mar 2010 08:13
 


Re: Problème de jointure et affichage de données

Message le 15 Déc 2010 17:06

Salut,

Rien ne s'affiche du tout ?

Sinon, tu peux essayer ça :

Code: Tout sélectionner
SELECT *
FROM cattravaux
LEFT JOIN cattravaux ON cattravaux.idCatTravaux = travaux.idTravaux


Si je ne me plante pas, ça devrait marcher ;)
Avatar de l'utilisateur
H3bus
Moderateur
Moderateur
 
Messages: 12195
Inscription: 08 Avr 2008 15:13
Localisation: /home/h3bus
 

Re: Problème de jointure et affichage de données

Message le 15 Déc 2010 17:18

si sa affiche :

travaux1
travaux2
travaux3
...

mais je voudrais afficher :

categorie1

travaux1
travaux2

categorie2

travaux3
travaux4

Je ne vois pas comment faire ...
Avatar de l'utilisateur
italiano1360
Visiteur Confirmé
Visiteur Confirmé
 
Messages: 15
Inscription: 02 Mar 2010 08:13
 

Re: Problème de jointure et affichage de données

Message le 15 Déc 2010 17:32

Hum, il faut que tu fasse l'affichage en php, parce que dans mon éditeur PostgreSQL, ça fonctionne très bien...
Avatar de l'utilisateur
H3bus
Moderateur
Moderateur
 
Messages: 12195
Inscription: 08 Avr 2008 15:13
Localisation: /home/h3bus
 

Re: Problème de jointure et affichage de données

Message le 15 Déc 2010 17:58

j'affiche comme sa

Code: Tout sélectionner
$sql = mysql_query('SELECT * FROM travaux WHERE FK_idCatTravaux IN (SELECT idCatTravaux FROM cattravaux)')or die(mysql_error());

while($data = mysql_fetch_assoc($sql)){
echo '<ul>';
echo '<li>'.$data["nomTravaux"].'</li>';
echo '</ul>';
}


mais la il y a que les travaux de toutes les sortes qui apparaissent et je voudrait les classer par catégorie en mettant :

categorie1 : travaux,travaux,travaux

categorie2 : travaux,travaux,travaux

categorie3 : travaux,travaux,travaux

Je n'arrive pas a afficher pour chaque catégorie tous les travaux dedans ...
Avatar de l'utilisateur
italiano1360
Visiteur Confirmé
Visiteur Confirmé
 
Messages: 15
Inscription: 02 Mar 2010 08:13
 

Re: Problème de jointure et affichage de données

Message le 15 Déc 2010 18:07

italiano1360 a écrit:j'affiche comme sa
Code: Tout sélectionner
$sql = mysql_query('SELECT * FROM travaux WHERE FK_idCatTravaux IN (SELECT idCatTravaux FROM cattravaux)')or die(mysql_error());


mais la il y a que les travaux de toutes les sortes qui apparaissent et je voudrait les classer par catégorie en mettant :
categorie1 : travaux,travaux,travaux
categorie2 : travaux,travaux,travaux
categorie3 : travaux,travaux,travaux

Je n'arrive pas a afficher pour chaque catégorie tous les travaux dedans ...


Ben c'est normal je pense... à froid tu n'affiche que la table "travaux" avec ton "SELECT * FROM travaux"... normal que tes catégories ne sortent pas.
Peut-être un ...
Code: Tout sélectionner
SELECT travaux.nomtravaux, cattravaux.nomCatTravaux  FROM travaux, cattravaux WHERE blablabla...

...marcherait mieux.
Avatar de l'utilisateur
CaSa
PC-Infopraticien
PC-Infopraticien
 
Messages: 9082
Inscription: 13 Mai 2003 16:32
Localisation: Sisteron, perle de Provence... et jamais loin d'une Debian
 

Re: Problème de jointure et affichage de données

Message le 15 Déc 2010 18:34

Oui j'ai ceci maintenant :

Code: Tout sélectionner
$sql = mysql_query('SELECT *  FROM travaux,cattravaux WHERE FK_idCatTravaux=idCatTravaux AND FK_idCatTravaux IN (SELECT idCatTravaux FROM cattravaux)')or die(mysql_error());

while($data = mysql_fetch_assoc($sql)){
echo '<ul>';
echo '<li>'.$data["nomTravaux"].'</li>';
echo '</ul>';
}


Je souhaite maintenant savoir comment j'affiche la catégorie ?

si je met
Code: Tout sélectionner
 echo $data["nomCatTravaux"]
dans la boucle sa s'affiche a chaque travaux et je veux l'afficher qu'une fois, je ne vois pas comment faire ... :oops:
Avatar de l'utilisateur
italiano1360
Visiteur Confirmé
Visiteur Confirmé
 
Messages: 15
Inscription: 02 Mar 2010 08:13
 

Re: Problème de jointure et affichage de données

Message le 15 Déc 2010 19:46

Salut,

J'ai ptet pas été au plus simple, mais essaye ce code ça devrait t'afficher une liste avec la structure suivante :

Code: Tout sélectionner
<ul>
   <li> Catégorie 1
      <ul>
         <li> travail 1  </li>
         <li> travail 2  </li>
      </ul>
   </li>
   <li> Catégorie 2
      <ul>
         <li> travail 1  </li>
      </ul>
   </li>
</ul>


Le code :
Code: Tout sélectionner
    $sql = mysql_query('SELECT * FROM travaux,cattravaux WHERE FK_idCatTravaux=idCatTravaux AND FK_idCatTravaux IN (SELECT idCatTravaux FROM cattravaux)') or die(mysql_error());
    $cat = ""; // catégorie courante
    $cpt = 0; // compteur de catégories
    echo "<ul>";

    while($data = mysql_fetch_assoc($sql)){
       if($cat <> $data['nomCatTravaux']) { // on change de catégorie ou il s'agit de la première catég.
          if($cpt == 0) { // il s'agit de la première catégorie
             echo "<li>".$data['nomCatTravaux']   // on affiche la 1ère catégorie
          }
          else {
             echo "</ul></li><li>".$data['nomCatTravaux'];   // on ferme la liste de la catégorie précédente et on affiche la nouvelle catégorie
          }
         
          echo "<ul><li>".$data['nomTravaux']."</li>"; // on affiche le premier travail de la catégorie courante
       
          $cat = $data['nomCatTravaux']; // on met à jour la catégorie courante
          $cpt++; // on met à jour le compteur
       } /// fin if
       else { // on est toujours dans la même catégorie
          echo "<li>".$data['nomTravaux']."</li>"; //on affiche le nom du travail
       } // fin else
    } // fin while
     echo "</ul>";


J'enregistre une catégorie courante $cat pour savoir quand on passe à la suivante, et un compteur $cpt pour savoir s'il s'agit de la première ligne.
Avatar de l'utilisateur
gael49
Expert(e)
Expert(e)
 
Messages: 1935
Inscription: 07 Sep 2004 20:11
Localisation: Les Mauges
 

Re: Problème de jointure et affichage de données

Message le 15 Déc 2010 20:00

ça ne fonctionne pas car pour chaque travaux sa me met la catégorie au dessus et je souhaite afficher la catégorie une seul fois puis lister les travaux ...
Avatar de l'utilisateur
italiano1360
Visiteur Confirmé
Visiteur Confirmé
 
Messages: 15
Inscription: 02 Mar 2010 08:13
 

Re: Problème de jointure et affichage de données

Message le 15 Déc 2010 20:51

Actuellement j'ai ça :

Code: Tout sélectionner
$sql = mysql_query('SELECT *  FROM travaux,cattravaux WHERE FK_idCatTravaux=idCatTravaux')or die(mysql_error());

while($data = mysql_fetch_assoc($sql)){
echo $data["nomCatTravaux"];
echo '<ul>';
echo '<li>'.$data["nomTravaux"].'</li>';
echo '</ul>';
}


qui me donne :

Façades

* Crépi taloché

Façades

* Crépi gratté

Petits Travaux

* placoplatre

Petits Travaux

* carrelage


Je voudrais n'afficher qu'une seule fois Façade avec Crépi taloché dedans et Crépi gratté
puis Petits Travaux avec dedans placoplatre et carrelage

Je peut pas etre plus clair :D
Avatar de l'utilisateur
italiano1360
Visiteur Confirmé
Visiteur Confirmé
 
Messages: 15
Inscription: 02 Mar 2010 08:13
 

Re: Problème de jointure et affichage de données

Message le 15 Déc 2010 21:19

Su tu rajoutes DISTINCT après ton SELECT, ça change quoi ?
Avatar de l'utilisateur
H3bus
Moderateur
Moderateur
 
Messages: 12195
Inscription: 08 Avr 2008 15:13
Localisation: /home/h3bus
 

Re: Problème de jointure et affichage de données

Message le 15 Déc 2010 21:34

ça ne change absolument rien :-?
Avatar de l'utilisateur
italiano1360
Visiteur Confirmé
Visiteur Confirmé
 
Messages: 15
Inscription: 02 Mar 2010 08:13
 

Re: Problème de jointure et affichage de données

Message le 15 Déc 2010 22:04

Effectivement en déroulant mon code j'ai vu 2/3 erreurs, essaye ce nouveau code :

Code: Tout sélectionner
    $sql = mysql_query('SELECT * FROM travaux,cattravaux WHERE FK_idCatTravaux=idCatTravaux AND FK_idCatTravaux IN (SELECT idCatTravaux FROM cattravaux)') or die(mysql_error());
    $cat = ""; // catégorie courante
    $cpt = 0; // compteur de catégories
    echo "<ul>";

    while($data = mysql_fetch_assoc($sql)){
       if($cat <> $data['nomCatTravaux']) { // on change de catégorie ou il s'agit de la première catég.
          if($cpt == 0) { // il s'agit de la première catégorie
             echo "<li>".$data['nomCatTravaux'];   // on affiche la 1ère catégorie
          }
          else {
             echo "</ul></li><li>".$data['nomCatTravaux'];   // on ferme la liste de la catégorie précédente et on affiche la nouvelle catégorie
          }
         
          echo "<ul><li>".$data['nomTravaux']."</li>"; // on affiche le premier travail de la catégorie courante
       
          $cat = $data['nomCatTravaux']; // on met à jour la catégorie courante
          $cpt++; // on met à jour le compteur
       } /// fin if
       else { // on est toujours dans la même catégorie
          echo "<li>".$data['nomTravaux']."</li>"; //on affiche le nom du travail
       } // fin else
    } // fin while
     echo "</ul>";
Avatar de l'utilisateur
gael49
Expert(e)
Expert(e)
 
Messages: 1935
Inscription: 07 Sep 2004 20:11
Localisation: Les Mauges
 

Re: Problème de jointure et affichage de données

Message le 15 Déc 2010 22:09

Il manquait un point virgule a la fin de la ligne 16 mais sinon ce code fonctionne parfaitement.
Je vous remercie de votre aide :wink:

Sujet Réglé
Avatar de l'utilisateur
italiano1360
Visiteur Confirmé
Visiteur Confirmé
 
Messages: 15
Inscription: 02 Mar 2010 08:13
 



Sujets similaires

Message [Réglé]Soucis avec hotmail
Bonjour , Je viens de réinstaller Windows 11 sur mon pc et mon soucis vient de Hotmail . Je ne peux plus me connecter pour créer mon compte avec MailBird ou EMClient . J'ai essayé en donnant mon mail chez free pour y recevoir un code , par mot de passe , rien ne marche . ça tourne en bouc ...
Réponses: 7

Message [Réglé] FTP sortant LIVEBOX
salut,Petite question à ceux qui connaissent les LIVEBOX , j'ai un soucis bizarre chez un collègue équipé d'une LIVEBOX fibre qu'il a changé récemment. Je lui gère un serveur Linux, et j'ai du venir lui re-paramétrer la livebox en mode "ports personnalisés" dans le pare-feu pour ouvrir et ...
Réponses: 5

Message [Réglé] choix d'une imprimante mutifonction canon
Bonsoir Mon imprimante canon pixma TR4550 m'a lâchée, j'ai eu beau nettoyer les buses et réaligner automatiquement les têtes d'impressions, il me sort des documents PDF dégueulasse des parties de texte qui comment dire tremblent double triple des morceaux de lettres manquent bref, et aussi erreur b ...
Réponses: 6

Message [Réglé] DDR5 6000Mhz
j ai verifier tous le cablage, j ai testé la carte graphique sur un autre pc et elle fonctionne. j ai re-demonté le watercooling pour vérifier que mon proco soit bien en place, j ai laissé le pc tourné 25 minutes pour m assuré que la ram ai le temps de se paramétré.la carte vidéo c est une amd RX906 ...
Réponses: 7

Message [Réglé] Problème pour numériser un document
Bonjour,Pourriez-vous m'aider à résoudre un problème car je n'arrive pas à numériser un document avec mon imprimante "HP envy photo 6220" sous Linux mint ?J'ai toujours le message d'erreur : "échec de la numérisation bac d'alimentation vide" malgré l'installation de " HP ...
Réponses: 5

Message [Réglé] Thunderbird cherche mon profil..
Bonjour à tous ! Et meilleurs voeux !Au lancement de Thunderbird, il annonce qu'il ne peut pas charger mon profil....Ne sachant que faire, je l'ai désinstallé puis réinstallé depuis la logithèque: Même message.....Que faire ?Merci pour vos avis...
Réponses: 3


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 6 invités


.: Nous contacter :: Flux RSS :: Données personnelles :.