Il y a actuellement 198 visiteurs
Mardi 11 Mars 2025
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: 9058
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, écran noir avec curseur qui bouge
Bonjour à tous ! Hier en éteignant mon pc fixe, au lieu de s'éteindre j'ai eu un écran noir mais j'ai le curseur de la souris qui bouge ( mais c'est un rond bleu ). J'ai beau rallumer l'ordinateur, vérifier mes branchements rien à faire. Je vois juste le logo Windows au démarrage et je peux accéder ...
Réponses: 23

Message [Réglé] pas de tel avec routeur
Bonjour,J'ai un routeur Tenda avec lequel j'ai internet et le téléphone, jusque la tout allais bien sauf que je n'ai plus de tel.J'ai pensé que le tel étais hs, j'en ai mis un autre et pas de tonalité.J'ai mis la carte sim dans mon tel portable et celui-ci fonctionne.J'ai remis la carte sim dans le ...
Réponses: 9

Message [Réglé] W11 reinstalle le mauvais pilote pour carte reseau
Bonjour,A chaque demarrage pc, si windows charge le pilote le plus recent (2021) de ma carte reseau (intel R 82579V) un coup sur 2 la carte demarre pas.Sinon si je reinstalle un pilote plus ancien de 2016 ou s il charge ce dernier au demarrage ca fonctionne sans probleme!Du coup, ma question: commen ...
Réponses: 45

Message [Réglé] Ecran gris.
Bonjour mon précédent problème n'étant plus trop d'actualité, je viens ici pour en parler d'un autre que j'ai depuis hier soir.En fait j'ai appris par un de mes amis que je rencontrerais moins d'erreur lié à une dll de Windows 11 ( KernelBase.dll)Si je rétrogradait Windows 11 en 22h2, alors j'ai che ...
Réponses: 4

Message [Réglé] impossible d'avoir winget
Salut tout le monde?Je suis passé à Windows 11 depuis quelque temps, vous n'êtes pas sans savoir pour ceux qui ont essayé de me dépanner que je ne peux pas me servir totalement de Windows Defender, pas de scans sur les fichiers ou dossiers en particulier. Je ne peux que scanner mon pc que par l'icôn ...
Réponses: 22

Message [Réglé] avis logiciel HandBrake
Salut tout le mondeJe voudrais svp un avis sur le logiciel HandBrake fiable ou non ?
Réponses: 2


Qui est en ligne

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


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