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 :

renommage de tous les champs renvoyés par une requête [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Par défaut renommage de tous les champs renvoyés par une requête
    Bonjour,

    j'aimerais savoir s'il est possible, quand on fait une requête sur plusieurs tables, de récupérer les champs sous la forme 'table.champ'. par exemple:
    pour la requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT table1.*, table2.* FROM table1, table2
    d'avoir pour chaque ligne les champs nommés table1.champ1, table1.champ2, ..., table2.champ1, table2.champ2, ... au lieu des noms simples des champs.
    Si vous connaissez une solution en SQL standard, en MySQL ou en PHP (ce qui m'étonnerait quand même), n'hésitez pas.

    merci

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    1) Les champs sont à la campagne ou dans les formulaires, pas dans les tables SQL qui ne sont composées que de colonnes et de lignes.

    2) Il vaut mieux éviter la guerre des étoiles !

    3) Les jointures s'écrivent depuis 20 ans avec l'opérateur JOIN ; il serait temps de s'y mettre !

    4) L'utilisation d'alias pour les tables est fortement recommandé dès qu'il y a plus d'une table dans la requête. Cela facilite l'écriture et la lecture de celle-ci. Il faut ensuite utiliser systématiquement ces alias devant chaque colonne nommée pour savoir facilement de quelle table elle vient.

    Compte-tenu de tout ce qui précède, votre requête devrait ressembler à ce qui suit, en prenant en compte le renommage des colonnes de résultat :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT t1.colonne1 AS t1_col1,
    	t1.colonne2 AS t1_col2,
    	t2.colonne1 AS t2_col1,
    	t2.colonne2 AS t2_col2
    	-- etc.
    FROM table1 t1
    INNER JOIN table2 t2 ON t2.cle_etrangere = t1.id

    Ceci dit, je n'en voit pas trop l'intérêt car les colonnes ont, dans un bon modèle de données, un nom à la signification, sinon évidente, au moins compréhensible.
    De plus, comme vous allez probablement récupérer le résultat de votre requête dans un tableau PHP, rien ne vous empêche d'indicer votre tableau avec des noms clairs.

    Exemple :
    Code PHP : 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
    // Requête donnant la liste des projets avec le nom et le prénom du chef de projet
    $sql = "
    	SELECT pj.prj_id,
    		pj.prj_nom,
    		p.prs_nom,
    		p.prs_prenom
    	FROM te_projet_prj pj
    	INNER JOIN te_personne_prs p ON p.prs_id = pj.prj_id_chef
    ";
     
    $result = mysql_query ($sql);
     
    while($row = mysql_fetch_array($result))
    {
    	$projets["{$row['prj_id']}"]['id_projet'] = $row['prj_id'];
    	$projets["{$row['prj_id']}"]['nom_projet'] = $row['prj_nom'];
    	$projets["{$row['prj_id']}"]['nom_chef_projet'] = $row['prs_prenom'].' '.$row['prs_nom'];
    }
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    1) Les champs sont à la campagne ou dans les formulaires, pas dans les tables SQL qui ne sont composées que de colonnes et de lignes.

    2) Il vaut mieux éviter la guerre des étoiles !

    3) Les jointures s'écrivent depuis 20 ans avec l'opérateur JOIN ; il serait temps de s'y mettre !

    4) L'utilisation d'alias pour les tables est fortement recommandé dès qu'il y a plus d'une table dans la requête. Cela facilite l'écriture et la lecture de celle-ci. Il faut ensuite utiliser systématiquement ces alias devant chaque colonne nommée pour savoir facilement de quelle table elle vient.

    Compte-tenu de tout ce qui précède, votre requête devrait ressembler à ce qui suit, en prenant en compte le renommage des colonnes de résultat :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT t1.colonne1 AS t1_col1,
    	t1.colonne2 AS t1_col2,
    	t2.colonne1 AS t2_col1,
    	t2.colonne2 AS t2_col2
    	-- etc.
    FROM table1 t1
    INNER JOIN table2 t2 ON t2.cle_etrangere = t1.id

    Ceci dit, je n'en voit pas trop l'intérêt car les colonnes ont, dans un bon modèle de données, un nom à la signification, sinon évidente, au moins compréhensible.
    De plus, comme vous allez probablement récupérer le résultat de votre requête dans un tableau PHP, rien ne vous empêche d'indicer votre tableau avec des noms clairs.

    Exemple :
    Code PHP : 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
    // Requête donnant la liste des projets avec le nom et le prénom du chef de projet
    $sql = "
    	SELECT pj.prj_id,
    		pj.prj_nom,
    		p.prs_nom,
    		p.prs_prenom
    	FROM te_projet_prj pj
    	INNER JOIN te_personne_prs p ON p.prs_id = pj.prj_id_chef
    ";
     
    $result = mysql_query ($sql);
     
    while($row = mysql_fetch_array($result))
    {
    	$projets["{$row['prj_id']}"]['id_projet'] = $row['prj_id'];
    	$projets["{$row['prj_id']}"]['nom_projet'] = $row['prj_nom'];
    	$projets["{$row['prj_id']}"]['nom_chef_projet'] = $row['prs_prenom'].' '.$row['prs_nom'];
    }
    1) pourtant même dans l'article que vous citez en 2), on parle de champs. mais bon disons colonnes

    2) et 3) il y a des étoiles et pas de jointure pour simplifier l'exemple à l'extrême, parce qu'elles ne font pas partie du problème

    4) le "problème" du AS, c'est qu'il s'utilise sur chaque colonne, ce qui fait énormément gonfler la requête (surtout quand on veut récupérer 15-20 colonnes). pareil avec le renommage directement en PHP.

    pour ce qui est du nommage explicite de chaque colonne dans un modèle de données, pour moi une colonne fait partie d'une table donc il ne devrait pas y avoir de redondance (avec la table) dans le nom de la colonne, mais de toute façon je dois travailler sur un modèle déjà existant donc ça ne m'avancera pas de discuter de ça

    Merci

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    1) pourtant même dans l'article que vous citez en 2), on parle de champs. mais bon disons colonnes
    Et bien il a tort !

    4) le "problème" du AS, c'est qu'il s'utilise sur chaque colonne, ce qui fait énormément gonfler la requête (surtout quand on veut récupérer 15-20 colonnes). pareil avec le renommage directement en PHP.
    Fainéant !

    J'ai actuellement une requête sur un projet qui fait 53 lignes. ce n'est pas la récupération de 20 colonnes qui me fait peur pour autant.

    J'imagine qu'en PHP tu dois quand même faire des programmes assez conséquents non ?
    Alors où est le problème ?
    Change de métier si tu trouves ça trop dur !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 38
    Par défaut
    ce n'est pas de la fénéantise, mais plutôt une volonté de simplicité et de concision, d'autant que je ne vois pas d'inconvénient à cette idée.
    enfin tant pis.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/08/2009, 17h39
  2. [MySQL] Faire une recherche sur tous les champ commencant par ..
    Par bullrot dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 31/10/2008, 11h45
  3. Rafraîchir les champs text par une requête
    Par nounowa dans le forum JDBC
    Réponses: 2
    Dernier message: 18/07/2007, 12h14
  4. Tous les champs SAUF dans une table.
    Par Yepazix dans le forum Bases de données
    Réponses: 1
    Dernier message: 28/08/2005, 16h01
  5. Sélectionner tous les id renvoyés par une 1ère requête
    Par Prof Vince dans le forum Requêtes
    Réponses: 5
    Dernier message: 29/11/2003, 19h46

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