IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Afficher valeur deux champs identiques


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2006
    Messages : 75
    Par défaut Afficher valeur deux champs identiques
    Bonjours à tous,

    Je rencontre un problème pour l'affichage des valeurs de certains champs. J'ai une requête qui sélectionne tous les champs de plusieurs tables, avec des jointures. Dans deux des tables sélectionnées [etablissements] et [users], on retrouve le même nom de champs [etab_id].

    J'aimerais afficher seulement la valeur du champ [etab_id] de la table [etablissements].
    La syntaxe suivante ne fonctionne pas (nom_table.nom_champ). J'obtiens l'erreur : "Undefined index". En revanche, ma requête fonctionne très bien, mais si je ne fais référence à aucune table pour le champ [etab_id], il m'affiche la valeur de la dernière table sélectionnées qui contient ce champs, c'est à dire la table [users].

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $requete_etab = "SELECT * FROM etablissements ".
    "INNER JOIN etats_clients ON etablissements.etat_cli_id = etats_clients.etat_cli_id ".
    "INNER JOIN zones ON etablissements.zone_id = zones.zone_id ".
    "LEFT JOIN users ON etablissements.user_id_commercial = users.user_id ".
    "ORDER BY trim(etab_nom) ASC LIMIT $from,$limit_par_page";
    $resultat_etab = requete_SQL($requete_etab);
     
    while($donnees_etab = mysql_fetch_array($resultat_etab[0])) {
     
      ...
      echo $donnees_etab["etablissements.etab_id"];
      ...
     
    }
    J'espère que mes explications ne sont pas trop confuses. Quelqu'un saurait il comment résoudre ce problème ? Merci d'avance.

  2. #2
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    D'après ta requête je dirais que le champs etab_id provient de la table établissement puisque tu lui demande de renvoyer tout les champs de celle ci !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fais un echo var_dump($donnees_etab[]);
    pour récupérer le vrai nom de la colonne renvoyé par la BDD
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Par défaut
    et si tu listais dans ton select les champs q tu veux selectionner? ce serait plus simple a mon avis. tu peux faire
    select etablissement.*, user.champ1,user.champ2 FROM .....

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2006
    Messages : 75
    Par défaut
    Merci pour votre aide.
    RideKick, le LEFT JOIN me permet de sélectionner tous les enregistrement de la table établissements et seulement ceux de la table user pour lesquels je trouve une correspondance pour etablissements.user_id_commercial = users.user_id. A priori, ca n'indique pas quel [etab_id] doit être affiché.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo var_dump($donnees_etab["etab_id"]);
    Le code ci-dessus me retourne la valeur NULL, qui correspond bien à la valeur du champ [etab_id] de la table [users] car dans la table [etablissements] tous les [etab_id] sont renseignés mais aucun ne l'est dans la table [users].

    ouatmad, sélectionner tous les champs un par un me ferais une requête serait assez fastidieux, mais c'est peut être ce que je ferais s'il n'existe aucune autre solution. J'ai pas mal de champs à récupérer...

    En ASP, pour une requête avec jointure, dans le même cas, on peut afficher le champ qu'on veut en précisant le nom de la table avant : nom_table.nom_champ. N'existerait il pas un équivalent en PHP ? C'est ce qui serait le plus pratique et le plus performant à mon sens, mais je ne sais pas comment trouver la bonne syntaxe... je n'ai rien trouvé sur le net à ce sujet. Est-ce que cette technique porte un nom ?

  5. #5
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    Cette technique porte un nom ça s'appel le langage sql , et c'est indépendant de PHP ou de ASP !

    En ce qui conerne les champs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM etablissements
    stipule bien que tu veux renvoyer les champs de la table établissement (comme tu n'en stipule aucun autre avant le FROM il n'y a pas de raison pour que les autres s'affichent !)

    tu veux vraiment pas essayer le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo var_dump($donnees_etab[]);
    ?

    normalement tu devrais voir apparaitre tout tes champs de la table établissement et pas un de plus lol
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2006
    Messages : 75
    Par défaut
    Bah en fait, j'ai testé la ligne ci-dessous quand tu me l'a proposée, mais j'ai obtenu l'erreur suivante : "Cannot use [] for reading"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo var_dump($donnees_etab[]);
    Comme je n'ai pas l'habitude d'utiliser cette fonction, me suis dit qu'il manquait quelque chose, c'est pour ça que j'ai mis [etab_id] entre les crochets vides...

    Sinon, oui pour le SQL nous sommes d'accord, mais il y a parfois des différences selon les langages pour obtenir le même résultat. A priori, le préfixe nom_table ne fonctionne pas en PHP, ou alors je n'ai pas compris comment l'utiliser.

    Entre temps, j'ai testé la proposition d'ouatmad (que je remercie au passage) qui fonctionne... mais c'est un peu galère de lister tous les champs et ça ne fonctionnera pas si je dois récupérer les valeurs des champs de noms identiques dans des tables différentes. En l'occurrence, je n'ai besoin pour cette requête que de récupérer [etab_id] de la table [etablissements], donc cette solution correspond à mes besoins.

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Par défaut
    enlève les crochets
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo var_dump($donnees_etab);
    tu peux aussi faire un print_r
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo print_r($donnees_etab);

  8. #8
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Par défaut
    Citation Envoyé par ouatmad Voir le message
    enlève les crochets
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo var_dump($donnees_etab);
    +1 me suis planté mea culpa !
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2006
    Messages : 75
    Par défaut
    Ca va mieux comme ça oui
    Je ne vais pas mettre le résultat en entier, c'est un peu long, mais pour ce qui nous intéresse, voici ce qui est indiqué pour le champs [etab_id].

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [0]=>  string(3) "253" ["etab_id"]=>  NULL
    C'est le tout premier champ de la table [etablissements] et pour le premier établissement dans l'ordre alphabétique, c'est bien l'id 253... par contre la valeur de ce champ semble nulle, ce qui n'est pas le cas dans la base. En revanche, pour cet établissement, il n'y a pas de user et la table [users] contient elle aussi un champ [etab_id]. Donc cette valeur nulle, c'est sans doute le résultat de la jointure avec la table [users] ?!

    De toute façon, ne vous prenez pas la tête, je vais laisser tomber cette première requête et lister les champs donc j'ai besoin, ce sera suffisant pour cette fois.

    Merci encore.

Discussions similaires

  1. Deux champs identiques dans la même table
    Par amne26 dans le forum Modélisation
    Réponses: 2
    Dernier message: 22/09/2008, 20h29
  2. [MySQL] sélectionner dans une table deux champs identiques
    Par zabdaniel dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 27/03/2008, 17h49
  3. Réponses: 5
    Dernier message: 15/09/2006, 16h13
  4. [MySQL] deux champs identiques
    Par Shredder dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 26/06/2006, 13h22
  5. Requete croisant deux champs identiques
    Par sabotage dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/08/2005, 11h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo