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

Langage PHP Discussion :

php et sql : noms de colonnes doublons


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut php et sql : noms de colonnes doublons
    Bonjour,

    je découvre le php et je suis face à un problème de noms de colonnes doublons.

    Je souhaiterai récupérer le retour d'une commande sql contenant plusieurs join vers la même table.
    Cela veut dire que les noms des colonnes seront donc les même?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $Hierarchie = $BaseDeDonnees->prepare('SELECT *
        FROM
          Hierarchie
          LEFT JOIN Pouvoirs AS pvr1 ON (pvr1.id = Hierarchie_Pouvoir1)
          LEFT JOIN Pouvoirs AS pvr2 ON (pvr2.id = Hierarchie_Pouvoir1)
          LEFT JOIN Pouvoirs AS pvr3 ON (pvr3.id = Hierarchie_Pouvoir3)
          LEFT JOIN Pouvoirs AS pvr4 ON (pvr4.id = Hierarchie_Pouvoir4)
          LEFT JOIN Pouvoirs AS pvr5 ON (pvr5.id = Hierarchie_Pouvoir5)
          LEFT JOIN Pouvoirs AS pvr6 ON (pvr6.id = Hierarchie_Pouvoir6)
        WHERE
          Hierarchie_Nom = ?'); 
    $Hierarchie->bindValue(1, $JoueursData[Joueur_Superieur], PDO::PARAM_STR);
    $Hierarchie->execute();
    $HierarchieData = $Hierarchie->fetch();
    $Hierarchie->closeCursor();
    Je peux utiliser $Hierarchie[Hierarchie_Nom] mais impossible de préciser que je veux celui de pvr2 ?!

    Il semble qu'il faille utiliser des alias dans le SELECT ?!
    Il faudrait donc que je retape les X colonnes dedans ?!
    Genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $Hierarchie = $BaseDeDonnees->prepare('SELECT
          pvr1.nom AS pvr1_nom,
          pvr2.nom AS pvr2_nom,
          ...
        FROM
          Hierarchie
          LEFT JOIN Pouvoirs AS pvr1 ON (pvr1.id = Hierarchie_Pouvoir1)
          LEFT JOIN Pouvoirs AS pvr2 ON (pvr2.id = Hierarchie_Pouvoir1)
          LEFT JOIN Pouvoirs AS pvr3 ON (pvr3.id = Hierarchie_Pouvoir3)
          LEFT JOIN Pouvoirs AS pvr4 ON (pvr4.id = Hierarchie_Pouvoir4)
          LEFT JOIN Pouvoirs AS pvr5 ON (pvr5.id = Hierarchie_Pouvoir5)
          LEFT JOIN Pouvoirs AS pvr6 ON (pvr6.id = Hierarchie_Pouvoir6)
        WHERE
          Hierarchie_Nom = ?'); 
    $Hierarchie->bindValue(1, $JoueursData[Joueur_Superieur], PDO::PARAM_STR);
    $Hierarchie->execute();
    $HierarchieData = $Hierarchie->fetch();
    $Hierarchie->closeCursor();
    Mais cela semble ultra galère car j'ai beaucoup de colonnes...

    Ou faut il que je crée plusieurs appels à la base de données ?
    Genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    $pvr1 = $BaseDeDonnees->prepare('
        SELECT *
        FROM
          Hierarchie
          LEFT JOIN Pouvoirs ON (Pouvoirs.id = Hierarchie_Pouvoir1)
        WHERE
          Hierarchie_Nom = ?
          '); // Préparation de la requete sql
    $pvr1->bindValue(1, $JoueursData[Joueur_Superieur], PDO::PARAM_STR);
    $pvr1->execute();
    $pvr1Data = $pvr1->fetch(); 
    $pvr1->closeCursor();
     
    $pvr2 = $BaseDeDonnees->prepare('
        SELECT *
        FROM
          Hierarchie
          LEFT JOIN Pouvoirs ON (Pouvoirs.id = Hierarchie_Pouvoir2)
        WHERE
          Hierarchie_Nom = ?
          '); // Préparation de la requete sql
    $pvr2->bindValue(1, $JoueursData[Joueur_Superieur], PDO::PARAM_STR);
    $pvr2->execute();
    $pvr2Data = $pvr2->fetch(); 
    $pvr2->closeCursor();
     
    $pvr3 = $BaseDeDonnees->prepare('
        SELECT *
        FROM
          Hierarchie
          LEFT JOIN Pouvoirs ON (Pouvoirs.id = Hierarchie_Pouvoir3)
        WHERE
          Hierarchie_Nom = ?
          '); // Préparation de la requete sql
    $pvr3->bindValue(1, $JoueursData[Joueur_Superieur], PDO::PARAM_STR);
    $pvr3->execute();
    $pvr3Data = $pvr3->fetch(); 
    $pvr3->closeCursor();
    Ai je raté quelque chose ?

    Car cela me semble vraiment pas adapté... sql permet de préciser la table mais pas php ?

    Merci à vous et bonne journée à vous !

  2. #2
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Si tu utilises par exemple alias.nom_champ as toto tu auras toto dans le resultset de la requête. Donc aucun problème.
    Quand j’ai un grand nombre de lignes qui se ressemblent à écrire j’utilise Excel. Par exemple dans une cellule je tape toto01 puis je « tire » la valeur vers le bas et automatiquement ça crée toto02, toto03 etc.

  3. #3
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Salut, merci pour ta réponse.

    Malheureusement j'avais bien compris alors...

    ma table contient une bonne 20e de colonnes fois 6... quelle misère de devoir faire des alias à chaque fois...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- il suffit de construire la requête en PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    $champs = array();
    $joins = array();
    for ($i=1; $i<=6; $i++)
    {
          $champs[] = " pvr".$i.".nom AS pvr".$i."_nom,
                     pvr".$i.".prenom AS pvr".$i."_prenom,
                     ...
                     ...
                     ...
                     pvr".$i.".dernier AS pvr".$i."_dernier "; // pas de virgule pour le dernier
          $joins[] = " LEFT JOIN Pouvoirs AS pvr".$i." ON (pvr".$i.".id = Hierarchie_Pouvoir".$i.") ";
    }
    // on concatène
    $champs = implode( ', ', $champs ); // on ajoute la virgule intermédiaire
    $joins = implode( ' ', $joins );
     
    $sql = "SELECT ".$champs." FROM Hierarchie ".$joins." WHERE Hierarchie_Nom = ?"; 
     
    $Hierarchie = $BaseDeDonnees->prepare( $sql );
    $Hierarchie->bindValue(1, $JoueursData[Joueur_Superieur], PDO::PARAM_STR);
    $Hierarchie->execute();
    $HierarchieData = $Hierarchie->fetch();
    $Hierarchie->closeCursor();
    Un simple echo $sql; te montrera si c'est correct.

    2- Pour récupérer les champs, même chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for ($i=1; $i<=6; $i++)
    {
          $datas[$i]['nom'] = $HierarchieData['pvr'.$i.'_nom'];
          $datas[$i]['prenom'] = $HierarchieData['pvr'.$i.'_prenom'];
    ...
    ...
    }
    var_dump( $datas ); pour voir ce qu'il contient.

  5. #5
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Merci beaucoup

    Ca fonctionne nickel !

    Juste dommage que PHP n'implante pas un truc de base permettant d'ajouter le nom de la table dans la clé du dictionnaire.

    Merci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Tu confonds PHP et SQL.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] conversion d'un chaine en php pour un nom de colonne valide sql
    Par Patchakutec dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/09/2016, 12h06
  2. Requête SQL (nom de colonne invalide)
    Par meryba dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/09/2012, 17h02
  3. Requete SQL Nom des Colonnes
    Par djoumusic dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/02/2011, 07h40
  4. Réponses: 7
    Dernier message: 12/04/2007, 14h04
  5. Réponses: 4
    Dernier message: 19/05/2005, 14h18

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