Afficher les données d'un champ d'une table d'après l'ID de cette table enregist [Résolu]

Signaler
Messages postés
28
Date d'inscription
samedi 3 décembre 2005
Statut
Membre
Dernière intervention
19 septembre 2008
-
Messages postés
28
Date d'inscription
samedi 3 décembre 2005
Statut
Membre
Dernière intervention
19 septembre 2008
-
Salut,

Grâce à votre aide, j'ai pas mal avancé sur mon projet, il me reste juste 1 soucis à règler...
Pour simplifier, j'ai une table qui gère des consoles, un table qui gère des types de codes, un table qui gère des regions etc...

Enfin j'ai un table pour mes codes contient des champs avec les ID des autres tables en relation.
Exemple, pour le jeu Final Fantasy 7, ma table code enregistre le nom du jeu, les codes proprement dit mais aussi l'id de la console concernée, l'id du type de code et l'id de la region du jeu....
Jusque la pas de soucis.

Le problème est le suivant, lors de ma requete pour restituer les codes et les afficher sur mon site, je me retrouve donc avec les ID qui s'affiche... et ce que je voudrait, c'est la méthode à utiliser pour qu'en fonction de l'ID, je puisse afficher un autre champ de la table à laquelle il fait référence.

Plus j'écrit et plus j'ai l'impression de mal m'expliquer...
Je tente un exempel avec juste 2 table :
Table "console"
ID
Nom

Table "codes"
ID
Nomdu jeu
Console_ID (qui correspont au champ ID de la table console).

Je fais une requete sur la table codes et je souhaite afficher :
Nomdu jeu - Nom de la console

Le problème c'est que si je fais une requete "normale", au mieux j'aurias :
Nomdujeu - Console_ID
Et je vuex remplacer le Console_ID par le champ Nom de la table "console" (alors que la requete se fait sur la table "codes"...

Voiçi le code de la requete actuellement utilisée :
include "admin/configbdd.php";
         $sql = 'SELECT * FROM Codes ORDER BY Time DESC';
         $req = mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error());
          while($data = mysql_fetch_array($req))
        {
                  echo ' <li> [affichecodes.php?id='.$data['ID'].' '.$data['Nomdujeu'].'] - '.$data['Regions_ID'].' - '.$data['Typescodes_ID'].' </li>';
        }
        mysql_close();
   ?>

En rouge, ce sont les ID d'autres tables enregistrés dans la table "codes" afin de créer une relation entre les tables..

Par exempel, la ou j'ai affiché Regions_ID, je souhaite en fait afficher le champ "Nom" de la table Regions ou "ID" ="Regions_ID" de ma table "console"  

J'espère avoir réussit à expliquer mon "problème"... j'arrive pas à trouver de documentation la dessus... certainement aussi car je sais pas trop comment nommer ce problème...

Merci d'avance

7 réponses

Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
21
Bonjour.
Je ne suis pas sur d'avoir suivi tout ton explication mais si tu fais
un ...
select * from console, codes where console.id = code.Console_ID ordre by Codes.time,
... tu dois pouvoir récupérés toutes les infos que tu veux.
Messages postés
28
Date d'inscription
samedi 3 décembre 2005
Statut
Membre
Dernière intervention
19 septembre 2008

Désolé pour l'explication pas claire, mais je vois pas trop comment expliquer mon cas...

J'ai déjà essayé une requete comme ça avec plusieurs tables et des WHERE et des AND (car j'ai plusieurs tables en jeu)... mais ça n'avais pas fonctionné du coup je me suis dit que ça marchait pas comme ca...

Je vais essayer de coder une nouvelle requete avec tes conseils et je vais tester juste avec 2 puis 3 et ensuite 4 tables...
Je mettrais mes résultats (bon ou non) içi.

Merci
Messages postés
28
Date d'inscription
samedi 3 décembre 2005
Statut
Membre
Dernière intervention
19 septembre 2008

Bon, ca marche pas.... j'ai plus rien qui s'affiche.. juste  2 tirets comme ca : - -

<?php
         include "admin/configbdd.php";         $sql 'SELECT * FROM Codes, Regions WHERE Codes.Regions_ID Regions.ID ORDER BY Time DESC';
         $req = mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error());
          while($data = mysql_fetch_array($req))
        {
                  echo ' <li> [affichecodes.php?id='.$data['Codes.ID'].' '.$data['Codes.Nomdujeu'].'] - '.$data['Regions.Nom'].' - '.$data['Codes.Typescodes_ID'].'</li>';
        }
        mysql_close();
   ?>

Voilà mon code modifié..... un idée ?
Messages postés
28
Date d'inscription
samedi 3 décembre 2005
Statut
Membre
Dernière intervention
19 septembre 2008

Bon, la fonction SELECT marche bien, je l'ai testée dans ma console mysql et elle me donne le bon résultat.

Donc mon problème doit se situer dans la ligne  "echo"...
Messages postés
28
Date d'inscription
samedi 3 décembre 2005
Statut
Membre
Dernière intervention
19 septembre 2008

Problème règlé.

J'ai contourné le probleme en renommant les champs de toutes mes tables pour n'avoir aucun doublon.
Ensuite, dans "echo", j'ai juste à préciser le nom du champ sans le prefixe de la table et ça fonctionne.

Merci pour le coup de main
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
21
Dans ta requete, au lieu de faire un select *, tu peux aussi aussi limite les champ que tu veux en faisant :
select matable.monchamp as champ, matable2.monchmap as champ2 from matable, matable2,  .....
Messages postés
28
Date d'inscription
samedi 3 décembre 2005
Statut
Membre
Dernière intervention
19 septembre 2008

Oui, j'ai essayé ca aussi.... la requete marchait bien mais l'affichage se faisait pas.
Apparement ca bloquait dans "echo", ca acceptait pas les noms de champ de ce format "nomdebase.nomdechamp"

Seul le format "nomdechamp"... mais comme j'avais plusieurs champs qui avait le même nom... et bien ça marchait pas.

Donc j'ai renommé tous mes champs de toutes les tables pour ne plus avoir de doublons, et ensuite la requete marche impeccable et l'affichage aussi.

Bien sûr il a fallu que je modifie aussi toutes les formulaires et autres requettes du site pour tenir compte des changements de nom des champs mais bon, c'était pas la mer à boire.