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

Requêtes MySQL Discussion :

Récapituler des données dans une vue


Sujet :

Requêtes MySQL

  1. #1
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut Récapituler des données dans une vue
    Bonjour,

    J'ai une problématique au boulot bien austère, que je préfère vous illustrer en prenant exemple sur un jeu :


    Prenez une table joueur avec id,debut et fin
    une table paysan avec id, statut, debut et fin
    une table mage avec id,statut, debut et fin
    une table guerrier avec id,statut,debut et fin


    Le joueur 4 arrive le 01/01/2012 et part le 31/12
    Il est dans la table paysan du 07/05 au 30/06, dans la table mage du 01/07 au 30/09, dans la table guerrier du 01/10 au 04/11.

    On aimerait dans une vue pouvoir lire à son sujet

    4 joueur 01/01 06/05
    4 paysan 07/05 30/06
    4 mage 01/07 30/09
    4 guerrier 01/10 04/11
    4 joueur 05/11 31/12

    Avec autant de tuples que de statut (ou non statut=joueur) sur une période. Dans tous les cas, on veut couvrir l'année du 01/01 au 31/12.

    J'ai essayé ceci, mais bien sûr, les dates pour joueur ne sont pas bonnes.

    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
    select joueur.id,"joueur" as statut,joueur.debut,joueur.fin
    from joueur
    where joueur.fin>="2012-01-01" and  joueur.debut<="2012-12-31"
    union
    select paysan.id,paysan.statut,paysan.debut,paysan.fin 
    from joueur
    inner join paysan
    on joueur.id=paysan.id
    and joueur.fin>=paysan.debut and  joueur.debut<=paysan.fin
    where joueur.fin>="2012-01-01" and  joueur.debut<="2012-12-31"
    union
    select mage.id,mage.statut,mage.debut,mage.fin 
    from joueur
    inner join mage
    on joueur.id=mage.id
    and joueur.fin>=mage.debut and  joueur.debut<=mage.fin
    where joueur.fin>="2012-01-01" and  joueur.debut<="2012-12-31"
    union
    select guerrier.id,guerrier.statut,guerrier.debut,guerrier.fin 
    from joueur
    inner join guerrier
    on joueur.id=guerrier.id
    and joueur.fin>=guerrier.debut and  joueur.debut<=guerrier.fin
    where joueur.fin>="2012-01-01" and  joueur.debut<="2012-12-31"
     
    group by id,statut,debut,fin
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    il y a quoi comme donnée dans la table joueur pour l'id 4 ?

  3. #3
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    4 2012-01-01 2012-12-31
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Je ne vois pas solution simple à votre problème.

    D'après ce que je comprend vos données de la table joueur sont décorélées de son appartenance à une classe / guilde.

    Donc j'aurai tendance à dire : traiter ça côté applicatif.
    Là il faudrait mettre en place des conditions assez complexe pour couvrir tous les cas côté sgbd ... Sans comptez que ca n'est pas très évolutif si vous rajouter une classe / guilde dans le futur.


    Il faudrai limite une autre table "statut" avec une notion de classe/guilde "active" (afin de gérer l'historique de vos joueurs) :
    Statut_joueur (#id_joueur, date_deb, date_fin, type_guilde, actif)

    Je ne sais pas si vous avez des attributs particuliers à chaque table mage/paysan/... ceci dit

    Allez sur le forum modélisation si vous voulez creuser d'autre piste.

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/04/2011, 10h18
  2. inserer des données dans une vue
    Par yodark dans le forum Requêtes
    Réponses: 1
    Dernier message: 23/05/2008, 16h30
  3. Réponses: 4
    Dernier message: 19/09/2005, 15h59
  4. [SQL server] Comment Fusionner des données dans une requête
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 15h24
  5. Réponses: 2
    Dernier message: 15/06/2005, 17h32

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