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 :

retourner une colonne inexistante dans un SELECT


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 194
    Points : 93
    Points
    93
    Par défaut retourner une colonne inexistante dans un SELECT
    Bonjour à tous,

    J'ai plusieurs tables : STAGE, STAGEANIMATEUR, ANIMATEUR, STAGESEMAINE, SEMAINE.

    La table STAGE contient des informations sur les stages
    La table ANIMATEUR contient les animateurs, ils sont affectés aux stages via STAGEANIMATEUR.
    La table SEMAINE contient les semaines contient les semaines, elles sont affectées aux stages via STAGESEMAINE.

    Je cherche à afficher les informations sur les STAGES avec les ANIMATEURS du stages et les SEMAINES pour ce stage.

    Et le tout dans une seule requête pour éviter de faire 1 requête pour les stages puis une pour les animateurs et enfin une pour les semaines, ce qui donnerait 81 requêtes sur une page en php ...

    J'ai pensé pour cela faire une requête union mais il faudrait que je puisse ressortir un champ inexistant pour pouvoir concaténer dans une requête qui englobe le tout pour les stages, semaines et animateurs en concaténant les données pour les animateurs, idem pour les semaines.

    Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    (SELECT s.StageId, '', '' FROM stage s)
    UNION
    (SELECT '', s.AnimateurId, '' FROM animateur a)
    UNION
    (SELECT '', '', se.SemaineId FROM semaine s)
    Mais la déclaration d'une colonne qui n'est pas basée sur un champ ne fonctionne pas.

    J'espère que c'est assez compréhensible.

    Merci pour votre aide.

  2. #2
    Membre éclairé
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    Salut,
    Peux-tu nous données les attributs de chacune de tes tables ?

    A priori, tu devrais pouvoir utiliser la syntaxe 'LEFT JOIN' pour regrouper tes tables.

    Z.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 194
    Points : 93
    Points
    93
    Par défaut
    OK.

    STAGE : StageId, StageNom
    STAGEANIMATEUR : StageId, AnimateurId
    ANIMATEUR : AnimateurId, AnimateurPrenom
    SEMAINE : SemaineId, SemaineDateDebut, SemaineDateFin
    STAGESEMAINE : StageId, SemaineId

    Pour le LEFT JOIN, je ne pense pas que ce soit possible puisqu'il peut y avoir plusieurs animateurs et plusieurs semaines affectés à un même stage.

    Pour répondre à mon besoin, il suffirait, je pense, de concaténer la liste des semaines dans une colonne et la liste des animateurs dans une autre colonne.

    Avec UNION, je ressortirai ainsi :
    StageId, StageNom, Animateurs, Semaines

    ex : 1, LeStage, DUPOND & JACQUES & PAUL, 11/07/09 & 18/07/09 & 25/07/09

    Merci pour votre aide

    P.S : pour l'admin. désolé pour la balise code, je ne la trouvais pas

  4. #4
    Membre éclairé
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    Ceci devrait fonctionner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * FROM stage AS a JOIN staganimateur AS b ON a.stageid = b.stageid
    JOIN animateur AS c ON b.animateurid = c.animateurid
    JOIN stagesemaine AS d ON a.stageid = d.stageid
    JOIN semaine AS e ON e.semaineid = d.semaineid
    Attention, chaque attribut de chaque table sera préfixé de son alias (ex : a.stagid, b.stagid...)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 194
    Points : 93
    Points
    93
    Par défaut
    Merci.

    Mais le soucis c'est qu'en faisant ainsi j'ai plusieurs lignes par stage lorsque le stage est animé par plusieurs animateurs ou sur plusieurs semaines.

    on pourrait envisager de faire une condition en php pour vérifier s'il s'agit du même Stage, mais je gère une pagination sur la page via un LIMIT N, N+1 pour afficher les stages de 40 en 40.

    D'où mon idée initiale pour n'avoir qu'une ligne par stage et une colonne ou je concatène les Nom d'animateurs et une autre ou je concatène les semaines.

    A moins qu'il y ait une autre méthode ??


    Encore merci

    ++

  6. #6
    Membre éclairé
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Points : 835
    Points
    835
    Par défaut
    Je sais que ce que tu veux faire mais je ne sais pas si c'est possible en mysql. Je l'utilise en postgres. Renseigne toi sur les fonctions d'aggregations de mysql. Si tu n'as tjrs pas trouvé demain, je jetterai un coup d'oeil en me basant sur postgres.

    Donc soit tu fais la concaténation en php, soit tu la fais dans une function mysql.
    La limite pour la pagination, tu peux la faire en imbriquant une autre requete.

Discussions similaires

  1. Réponses: 10
    Dernier message: 13/09/2012, 12h04
  2. Réponses: 3
    Dernier message: 03/05/2007, 11h06
  3. Réponses: 3
    Dernier message: 19/07/2006, 14h28
  4. [SQL Server 2000] ajouter une colonne identité dans une vue?
    Par CetTer dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/08/2005, 13h43
  5. Joindre une valeur arbitraire dans un SELECT
    Par Tuxxy dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/01/2004, 17h04

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